% (The MIT License)
%
% Copyright (c) 2021-2022 Yegor Bugayenko
%
% Permission is hereby granted, free of charge, to any person obtaining a copy
% of this software and associated documentation files (the 'Software'), to deal
% in the Software without restriction, including without limitation the rights
% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
% copies of the Software, and to permit persons to whom the Software is
% furnished to do so, subject to the following conditions:
%
% The above copyright notice and this permission notice shall be included in all
% copies or substantial portions of the Software.
%
% THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
% SOFTWARE.

\documentclass[12pt]{article}
\usepackage[T1]{fontenc}
\usepackage[tt=false,type1=true]{libertine}
\usepackage{amsmath}
\usepackage{multicol}
\usepackage{ffcode}
\usepackage{xcolor}
\usepackage{microtype}
\title{\ff{ffcode}: \LaTeX{} Package \\ for Fixed-Font Code Blocks}
\author{Yegor Bugayenko}
\date{0.4.4 2022/09/12}
\begin{document}
\pagenumbering{gobble}
\raggedbottom
\setlength{\parindent}{0pt}
\setlength{\columnsep}{32pt}
\setlength{\parskip}{6pt}
\maketitle

This package helps you write source code in your articles
and make sure it looks nice. Install it from CTAN and then
use like this (pay attention to \ff{\char`\\ff} command
and \ff{ffcode} environment):

\begin{multicols}{2}
\setlength{\parskip}{0pt}
\scriptsize
\raggedcolumns
\begin{verbatim}
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{ffcode}
\begin{document}
The function \ff{fibo()} is recursive:
\begin{ffcode}
int fibo(int n) {
  if (n < 2) {
    return n; |$\label{ln:ret}$|
  }
  return fibo(n - 1) + fibo(n - 2);
}
\end{ffcode}
The line no.~\ref{ln:ret} terminates it.
\end{document}
\end{verbatim}

\columnbreak

The function \ff{fibo()} is recursive:

\begin{ffcode}
int fibo(int n) {
  if (n < 2) {
    return n; |$\label{ln:ret}$|
  }
  return fibo(n - 1) + fibo(n - 2);
}
\end{ffcode}

The line no.~\ref{ln:ret} terminates it.
\end{multicols}

You have to run \ff{pdflatex} with \ff{--shell-escape} flag
in order to let \ff{minted} (the package we use) to run Pygments
and format the code. If you don't want this to happen,
just use \ff{nopygments} option.

A pair of vertical lines decorate a TeX command inside the snippet.
If you want to print a single vertical line, use this:
\ff{|\char`\\vert|}.

If you want to omit the light gray frames around \ff{\char`\\ff}
texts, use the package option \ff{noframes}.

The command \ff{\char`\\ff\char`\{...\char`\}} behaves differently in math mode: it doesn't
add gray frames:
\begin{equation}
x = \int_\ff{home}^N f(x).
\end{equation}

To omit the vertical gray bar at the left side of each snippet,
use \ff{nobars} option of the package.

To omit the line numbers, use \ff{nonumbers} option of the package.

By default, the numbering is continuous: line numbers start at the
first snippet and increment until the end of the document. If you
want them to start from one at each snippet, use \ff{nocn}
(stands for ``no continuous numbering'')
option of the package.

You can highlight some lines in your \ff{ffcode} environment,
or can use any other additional configuration parameters from
\ff{minted} package:

\begin{multicols}{2}
\setlength{\parskip}{0pt}
\scriptsize
\raggedcolumns
\begin{verbatim}
\begin{ffcode*}{highlightlines={1,4-5}}
while (true) {
  print("Hello!")
  print("Enter your name:")
  scan(x)
  print("You name is " + x)
}
\end{ffcode*}
\end{verbatim}

\columnbreak

\begin{ffcode*}{highlightlines={7,10-11}}
while (true) {
  print("Hello!")
  print("Enter your name:")
  scan(x)
  print("You name is " + x)
}
\end{ffcode*}
\end{multicols}

Using this second argument of \ff{ffcode*} (with the trailing asterisk),
you can provide any other options from \ff{minted} package to the
snippet.

By the way, the package correctly formats low-height texts, for example, just
a dot: \ff{.}

More details about this package you can find
in \ff{yegor256/ffcode} GitHub repository.

\end{document}