From 30b3429f0e138c93c5f1ba1d1a6d46728c0943e9 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Tue, 4 Oct 2022 03:00:59 +0000 Subject: CTAN sync 202210040300 --- macros/latex/contrib/ffcode/ffcode.dtx | 383 +++++++++++++++++++++++++++++++++ 1 file changed, 383 insertions(+) create mode 100644 macros/latex/contrib/ffcode/ffcode.dtx (limited to 'macros/latex/contrib/ffcode/ffcode.dtx') diff --git a/macros/latex/contrib/ffcode/ffcode.dtx b/macros/latex/contrib/ffcode/ffcode.dtx new file mode 100644 index 0000000000..c6d717c7b5 --- /dev/null +++ b/macros/latex/contrib/ffcode/ffcode.dtx @@ -0,0 +1,383 @@ +% \iffalse meta-comment +% (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. +% \fi + +% \CheckSum{0} +% +% \CharacterTable +% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +% Digits \0\1\2\3\4\5\6\7\8\9 +% Exclamation \! Double quote \" Hash (number) \# +% Dollar \$ Percent \% Ampersand \& +% Acute accent \' Left paren \( Right paren \) +% Asterisk \* Plus \+ Comma \, +% Minus \- Point \. Solidus \/ +% Colon \: Semicolon \; Less than \< +% Equals \= Greater than \> Question mark \? +% Commercial at \@ Left bracket \[ Backslash \\ +% Right bracket \] Circumflex \^ Underscore \_ +% Grave accent \` Left brace \{ Vertical bar \| +% Right brace \} Tilde \~} + +% \GetFileInfo{ffcode.dtx} +% \DoNotIndex{\endgroup,\begingroup,\let,\else,\fi,\newcommand,\newenvironment} + +% \iffalse +%<*driver> +\ProvidesFile{ffcode.dtx} +% +%\NeedsTeXFormat{LaTeX2e} +%\ProvidesPackage{ffcode} +%<*package> +[03.10.2022 0.5.0 Fixed Font Code] +% +%<*driver> +\documentclass{ltxdoc} +\usepackage[T1]{fontenc} +\usepackage[tt=false,type1=true]{libertine} +\usepackage{microtype} +\usepackage{href-ul} +\usepackage{ffcode} +\usepackage{amsmath} +\usepackage{multicol} +\usepackage{xcolor} +\PageIndex +\EnableCrossrefs +\CodelineIndex +\RecordChanges +\begin{document} + \DocInput{ffcode.dtx} + \PrintChanges + \PrintIndex +\end{document} +% +% \fi + +% \title{|ffcode|: \LaTeX{} Package \\ for Fixed-Font Code Blocks\thanks{The sources are in GitHub at \href{https://github.com/yegor256/ffcode}{yegor256/ffcode}}} +% \author{Yegor Bugayenko \\ \texttt{yegor256@gmail.com}} +% \date{\filedate, \fileversion} +% +% \maketitle +% +% \section{Introduction} +% +% 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| command +% and |ffcode| environment): +% \begin{multicols}{2} +% \setlength{\parskip}{0pt} +% \raggedcolumns +%\iffalse +%<*verb> +%\fi +\begin{verbatim} +\documentclass{article} +\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} +%\iffalse +% +%\fi +% +% \columnbreak +% +% The function \ff{fibo()} is recursive: +% +%\iffalse +%<*verb> +%\fi +\begin{ffcode} +int fibo(int n) { + if (n < 2) { + return n; |$\label{ln:ret}$| + } + return fibo(n-1)+fibo(n-2); +} +\end{ffcode} +%\iffalse +% +%\fi +% +% The line no.~\ref{ln:ret} terminates it. +% \end{multicols} + +% \section{Package Options} + +% \begin{macro}{nopygments} +% You have to run |pdflatex| with |--shell-escape| flag +% in order to let |minted| (the package we use) to run Pygments +% and format the code. If you don't want this to happen, +% just use |nopygments| option. +% \end{macro} + +% \begin{macro}{noframes} +% If you want to omit the light gray frames around |\ff| +% texts, use the package option |noframes|. +% \end{macro} + +% \begin{macro}{nobars} +% To omit the vertical gray bar at the left side of each snippet, +% use |nobars| option of the package. +% \end{macro} + +% \begin{macro}{nonumbers} +% To omit the line numbers, use |nonumbers| option of the package. +% \end{macro} + +% \begin{macro}{nocn} +% 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 |nocn| +% (stands for ``no continuous numbering'') +% option of the package. +% \end{macro} + +% \section{Typesetting} + +% By the way, the package correctly formats low-height texts, for example, just +% a dot: \ff{.} + +% 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|}. + +% The command |\ff| behaves differently in math mode --- it doesn't +% add gray frames: +% \begin{multicols}{2} +% \setlength{\parskip}{0pt} +% \raggedcolumns +%\iffalse +%<*verb> +%\fi +\begin{verbatim} +\documentclass{article} +\usepackage{ffcode} +\begin{document} +\begin{equation} +x = \int_\ff{home}^N f(x). +\end{equation} +\end{document} +\end{verbatim} +%\iffalse +% +%\fi +% +% \columnbreak +% +%\iffalse +%<*verb> +%\fi +% \begin{equation} +% x = \int_\ff{home}^N f(x). +% \end{equation} +%\iffalse +% +%\fi +% \end{multicols} + +% \section{Line Highlighting} + +% You can highlight some lines in your |ffcode| environment, +% or can use any other additional configuration parameters from +% |minted| package: + +% \begin{multicols}{2} +% \setlength{\parskip}{0pt} +% \raggedcolumns +%\iffalse +%<*verb> +%\fi +\begin{verbatim} +\documentclass{article} +\usepackage{ffcode} +\begin{document} +\begin{ffcode*} + {highlightlines={1,4-5}} +while (true) { + print("Hello!") + print("Enter your name:") + scan(x) + print("You name is " + x) +} +\end{ffcode*} +\end{document} +\end{verbatim} +%\iffalse +% +%\fi +% +% \columnbreak +% +%\iffalse +%<*verb> +%\fi +\begin{ffcode*}{highlightlines={7,10-11}} +while (true) { + print("Hello!") + print("Enter your name:") + scan(x) + print("You name is " + x) +} +\end{ffcode*} +%\iffalse +% +%\fi +% \end{multicols} + +% Using this second argument of |ffcode*| (with the trailing asterisk), +% you can provide any other options from |minted| package to the +% snippet. + +% \StopEventually{} + +% \section{Implementation} + +% \changes{v0.2.0}{2021/07/10}{Initial version} + +% First, we parse package options: +% \begin{macrocode} +\RequirePackage{xkeyval} +\makeatletter +\DeclareOptionX{nopygments}{\PassOptionsToPackage{draft=true}{minted}} +\newif\ifff@noframes +\DeclareOptionX{noframes}{\ff@noframestrue} +\newif\ifff@nobars +\DeclareOptionX{nobars}{\ff@nobarstrue} +\newif\ifff@nonumbers +\DeclareOptionX{nonumbers}{\ff@nonumberstrue} +\newif\ifff@nocn +\DeclareOptionX{nocn}{\ff@nocntrue} +\ProcessOptionsX\relax +\makeatother +% \end{macrocode} + +% Then, we configure |minted| package: +% \begin{macrocode} +\RequirePackage{minted} +\setminted{breaklines} +\setminted{escapeinside=||,mathescape} +\setminted{highlightcolor=gray!25} +\usemintedstyle{bw} +% \end{macrocode} + +% \begin{macro}{ffcode} +% Then, we define |ffcode| environment: +% \begin{macrocode} +\makeatletter\ifff@nonumbers + \ifff@nobars + \newminted[ffcode]{text}{} + \else + \newminted[ffcode]{text}{framesep=6pt, + framerule=1pt,rulecolor=gray,frame=leftline} + \fi +\else + \renewcommand{\theFancyVerbLine}{\textcolor{gray} + {\tiny\oldstylenums{\ttfamily\arabic{FancyVerbLine}}}} + \ifff@nocn + \ifff@nobars + \newminted[ffcode]{text}{ + linenos,numbersep=2pt + } + \else + \newminted[ffcode]{text}{ + framesep=6pt,framerule=1pt,rulecolor=gray, + frame=leftline,linenos,numbersep=2pt + } + \fi + \else + \ifff@nobars + \newminted[ffcode]{text}{ + firstnumber=last,linenos,numbersep=2pt + } + \else + \newminted[ffcode]{text}{ + framesep=6pt,framerule=1pt,rulecolor=gray, + frame=leftline,firstnumber=last,linenos,numbersep=2pt + } + \fi + \fi +\fi\makeatother +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\ff@print} +% Then, we define supplementary commands |\ff@print| and |\ff@printx|: +% \begin{macrocode} +\makeatletter +\newcommand\ff@print{\begingroup\obeyspaces\ff@printx} +\newcommand\ff@printx[1]{\texttt{#1}\endgroup} +\makeatother +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\ff@rule} +% Then, we define supplementary command |\ff@rule|: +% \begin{macrocode} +\makeatletter\newcommand\ff@rule + {\vrule height 6pt depth 1pt width 0pt} +\makeatother +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\ff} +% Finally, we define |\ff| command: +% \begin{macrocode} +\makeatletter\ifff@noframes + \newcommand\ff[1]{\ff@rule\ff@print{#1}} +\else + \RequirePackage{tcolorbox} + \newtcbox\ff@box{nobeforeafter,colframe=gray!80!white, + colback=gray!5!white,boxrule=0.1pt,arc=1pt, + boxsep=1.2pt,left=0.5pt,right=0.5pt,top=0.2pt,bottom=0.2pt, + tcbox raise base} + \newcommand\ff[1]{\relax\ifmmode% + {\ff@rule\ff@print{#1}}% + \else% + {\ff@box{\ff@rule\ff@print{#1}}} + \fi} +\fi\makeatother +% \end{macrocode} +% \end{macro} + +% \Finale + +%\clearpage +% +%\PrintChanges +%\clearpage +%\PrintIndex -- cgit v1.2.3