% (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}