From c97298ed18c653a74616ed26ee77872c1dffcffa Mon Sep 17 00:00:00 2001 From: nobody Date: Sat, 7 Dec 2024 23:05:49 +0100 Subject: [PATCH] doku skeleton is standing --- .gitignore | 1 + Makefile | 1 + cccbform.cls | 4 +- doku.tex | 119 +- fvextra.sty | 3281 -------------------------------------------------- mwe.tex | 49 - 6 files changed, 94 insertions(+), 3361 deletions(-) delete mode 100644 fvextra.sty delete mode 100644 mwe.tex diff --git a/.gitignore b/.gitignore index 2b22163..b8bc715 100644 --- a/.gitignore +++ b/.gitignore @@ -5,5 +5,6 @@ *.toc *.pdf _minted-* +cccbform-examples *.fdb_latexmk *.fls diff --git a/Makefile b/Makefile index 5a7415b..90886a5 100644 --- a/Makefile +++ b/Makefile @@ -8,6 +8,7 @@ all: $(ALLPDF) clean: latexmk -c + rm -r _minted-doku cccbform-examples distclean: latexmk -C diff --git a/cccbform.cls b/cccbform.cls index 2707fc9..03ccfb8 100644 --- a/cccbform.cls +++ b/cccbform.cls @@ -23,11 +23,11 @@ \@Exampletrue } \DeclareOption{shortexample}{ - \geometry{paperwidth=105mm, paperheight=74mm, margin=1ex} + \geometry{paperwidth=105mm, paperheight=74mm, margin=2ex} \@Exampletrue \AtEndDocument{% \pageheight=\pagetotal - \advance\pageheight by 2ex + \advance\pageheight by 4ex } } \ProcessOptions\relax diff --git a/doku.tex b/doku.tex index 2ad39e2..510751a 100644 --- a/doku.tex +++ b/doku.tex @@ -1,5 +1,5 @@ \documentclass{ltxdoc} -\usepackage{tikz,fancyvrb,geometry,minted,fontspec} +\usepackage{tikz,geometry,minted,fontspec,luacode} \usepackage[ngerman]{babel} \usetikzlibrary{positioning} \geometry{a4paper,margin=2cm} @@ -50,40 +50,93 @@ \directlua{ os.execute "cp cccbform.cls cccbform-examples/" } \directlua{ os.execute "cp logo.pdf cccbform-examples/" } -\NewDocumentCommand{\LineCount}{m}{\directlua{ - local n, f = 0, io.open("cccbform-examples/#1.tex") - for l in f:lines() do n = n + 1 end - tex.print( n - 1 ) -}} +\begin{luacode*} +HEADER = [[ +\documentclass[shortexample]{cccbform} +\begin{document} +]] +FOOTER = [[ +\end{document} +]] +\end{luacode*} -\NewDocumentEnvironment{ShortExample}{m}{ - \VerbatimEnvironment - \begin{VerbatimOut}{cccbform-examples/#1.tex}[] - \documentclass[shortexample]{cccbform} - \begin{document}}{ - \end{document} - \end{VerbatimOut} - \directlua{ os.execute "cd cccbform-examples ; latexmk -pdflua #1.tex" } - \edef\lc{\LineCount{#1}} - \begin{tikzpicture} - \node[anchor=north west, inner sep=1ex, draw] (code) { - \begin{minipage}[t]{0.45\textwidth} - \inputminted[firstline=3,lastline=\lc]{tex}{cccbform-examples/#1.tex} - \end{minipage} - }; - \node[anchor=north west, right=2mm of code, draw] (output) { - \begin{minipage}[t]{0.45\textwidth} - \includegraphics[width=\linewidth]{cccbform-examples/#1.pdf} - \end{minipage} - }; - \end{tikzpicture} +\begin{luacode*} + function makeVerb( envname ) + local buf + local function bufread( chunk ) + if chunk:find( "\\end{"..envname.."}" ) then return nil end + buf[#buf+1] = chunk + return "" + end + local function luaverbstart( ) + buf = { } + luatexbase.add_to_callback( "process_input_buffer", bufread, "bufread" ) + end + local function luaverbend( ) + luatexbase.remove_from_callback( "process_input_buffer", "bufread" ) + buf[#buf+1] = "" + buf = table.concat( buf, "\n" ) + return buf + end + return luaverbstart, luaverbend + end + + function CMD(name) return "\\"..name end +\end{luacode*} + +\directlua{ ShortExampleStart, ShortExampleEnd = makeVerb "ShortExample" } + +\NewDocumentEnvironment{ShortExample}{m m}{ + \directlua{ShortExampleStart()}}{\directlua{ + CONTENT = ShortExampleEnd( ) + local f = io.open( "cccbform-examples/#1.tex", "w" ) + f:write( HEADER, CONTENT, FOOTER ) + f:close( ) + os.execute( "cd cccbform-examples ; latexmk -pdflua #1.tex" ) + local n, f = 0, io.open( "cccbform-examples/#1.tex" ) + for l in f:lines( ) do n = n + 1 end + tex.print( CMD"def"..CMD"lc".."{" .. (n-1) .. "}" ) + } + + \begin{tikzpicture}[example frame/.style={draw=gray!50, thick, inner sep=1ex}] + \node[draw=gray!30, fill=gray!5, inner sep=1ex, rounded corners, minimum width=\textwidth] (example container) {}; + \node[example frame, anchor=north west, minimum height=7cm] (code) at (example container.north west) { + \begin{minipage}[t]{0.45\textwidth} + \inputminted[firstline=3,lastline=\lc]{tex}{cccbform-examples/#1.tex} + \end{minipage} + }; + \node[example frame, anchor=north west, right=2mm of code, minimum height=7cm] (output) { + \begin{minipage}[t]{0.45\textwidth} + \includegraphics[width=\linewidth]{cccbform-examples/#1.pdf} + \end{minipage} + }; + \node[anchor=north west, font=\small\itshape] at (example container.north west |- code.north west) {Example: #2}; + \end{tikzpicture} + +% \begin{tikzpicture} +% \node[anchor=north west, inner sep=1ex, draw] (code) { +% \begin{minipage}[t]{0.45\textwidth} +% \inputminted[firstline=3,lastline=\lc]{tex}{cccbform-examples/#1.tex} +% \end{minipage} +% }; +% \node[anchor=north west, right=2mm of code, draw] (output) { +% \begin{minipage}[t]{0.45\textwidth} +% \includegraphics[width=\linewidth]{cccbform-examples/#1.pdf} +% \end{minipage} +% }; +% \end{tikzpicture} } + \NewDocumentEnvironment{StandaloneExample}{m}{ \VerbatimEnvironment% \begin{VerbatimOut}{cccbform-examples/#1.tex}}% {\end{VerbatimOut}% \directlua{ os.execute "cd cccbform-examples ; latexmk -pdflua #1.tex" } - \edef\lc{\LineCount{#1}} + \directlua{ + local n, f = 0, io.open( "cccbform-examples/#1.tex" ) + for l in f:lines( ) do n = n + 1 end + tex.print( CMD"def"..CMD"lc".."{" .. (n-1) .. "}" ) + } \begin{tikzpicture} \node[anchor=north west, inner sep=1ex, draw] (code) { \begin{minipage}[t]{0.45\textwidth} @@ -106,8 +159,16 @@ \section{Übersicht} -\begin{ShortExample}{test} +\begin{ShortExample}{text}{Text} \Text{Test} \end{ShortExample} +\begin{ShortExample}{textfield}{normales Textfeld} +\TextField{abc} +\end{ShortExample} + +\begin{ShortExample}{shorttextfield}{kurzes Textfeld} +\ShortTextField{abc} +\end{ShortExample} + \end{document} diff --git a/fvextra.sty b/fvextra.sty deleted file mode 100644 index 9f9cd09..0000000 --- a/fvextra.sty +++ /dev/null @@ -1,3281 +0,0 @@ -%% -%% This is file `fvextra.sty', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% fvextra.dtx (with options: `package') -%% -%% This is a generated file. -%% -%% Copyright (C) 2016-2024 by Geoffrey M. Poore -%% -------------------------------------------------------------------------- -%% This work may be distributed and/or modified under the -%% conditions of the LaTeX Project Public License, either version 1.3 -%% of this license or (at your option) any later version. -%% The latest version of this license is in -%% http://www.latex-project.org/lppl.txt -%% and version 1.3 or later is part of all distributions of LaTeX -%% version 2005/12/01 or later. -%% -\NeedsTeXFormat{LaTeX2e}[1999/12/01] -\ProvidesPackage{fvextra} - [2024/11/17 v1.10.0 fvextra - extensions and patches for fancyvrb] -\RequirePackage{etoolbox} -\RequirePackage{fancyvrb} -\RequirePackage{upquote} -\AtEndPreamble{% - \ifx\encodingdefault\upquote@OTone - \ifx\ttdefault\upquote@cmtt\else\RequirePackage{textcomp}\fi - \else - \RequirePackage{textcomp} - \fi} -\RequirePackage{lineno} -\@ifpackageloaded{csquotes}% - {\PackageWarning{fvextra}{csquotes should be loaded after fvextra, % - to avoid a warning from the lineno package}}{} -\begingroup -\catcode`\ =\active% -\gdef\FV@ActiveSpaceToken{ }% -\endgroup% -\edef\FV@SpaceCatTen{{\detokenize{ }}} -\def\FV@FVSpaceToken{\FV@Space} -\def\FV@FVTabToken{\FV@Tab} -\def\FVExtraDoSpecials{% - \do\ \do\!\do\"\do\#\do\$\do\%\do\&\do\'\do\(\do\)\do\*\do\+\do\,\do\-% - \do\.\do\/\do\:\do\;\do\<\do\=\do\>\do\?\do\@\do\[\do\\\do\]\do\^\do\_% - \do\`\do\{\do\|\do\}\do\~} -\begingroup -\def\do#1{% - \expandafter\global\expandafter - \let\csname FV@Special:\expandafter\@gobble\detokenize{#1}\endcsname\relax} -\FVExtraDoSpecials -\endgroup -\begingroup -\catcode`\<=11 -\catcode`\>=11 -\gdef\FV@Sentinel{\FV@} -\endgroup -\begingroup -\catcode`\^^M=\active% -\gdef\FV@OuterDefEOLEmpty{\outer\def^^M{}}% -\endgroup -\begingroup -\catcode`\^^M=\active% -\gdef\FV@DefEOLEmpty{\def^^M{}}% -\endgroup -\begingroup -\catcode`\^^B=\active -\gdef\FV@OuterDefSTXEmpty{\outer\def^^B{}} -\endgroup -\begingroup -\catcode`\^^C=\active -\gdef\FV@OuterDefETXEmpty{\outer\def^^C{}} -\endgroup -\newif\ifFV@pdfTeXinputenc -\FV@pdfTeXinputencfalse -\ifcsname pdfmatch\endcsname -\ifx\pdfmatch\relax -\else - \@ifpackageloaded{inputenc}% - {\ifcsname inputencodingname\endcsname - \ifx\inputencodingname\relax - \else - \FV@pdfTeXinputenctrue - \fi\fi} - {}% -\fi\fi -\ifFV@pdfTeXinputenc -\begingroup -\catcode`\~=13 -\catcode`\"=12 -\def\FV@UTFviii@loop{% - \uccode`\~\count@ - \uppercase\expandafter{\FV@UTFviii@Tmp}% - \advance\count@\@ne - \ifnum\count@<\@tempcnta - \expandafter\FV@UTFviii@loop - \fi} -\count@"C2 -\@tempcnta"E0 -\def\FV@UTFviii@Tmp{\expandafter\gdef\csname FV@U8:\string~\endcsname{% - \FV@UTF@two@octets}} -\FV@UTFviii@loop -\count@"E0 -\@tempcnta"F0 -\def\FV@UTFviii@Tmp{\expandafter\gdef\csname FV@U8:\string~\endcsname{% - \FV@UTF@three@octets}} -\FV@UTFviii@loop -\count@"F0 -\@tempcnta"F4 -\def\FV@UTFviii@Tmp{\expandafter\gdef\csname FV@U8:\string~\endcsname{% - \FV@UTF@four@octets}} -\FV@UTFviii@loop -\endgroup -\def\FV@UTF@two@octets#1#2{% - \ifcsname u8:\detokenize{#1#2}\endcsname - \else - #1#2% - \fi - \FV@UTF@octets@after{#1#2}} -\def\FV@UTF@three@octets#1#2#3{% - \ifcsname u8:\detokenize{#1#2#3}\endcsname - \else - #1#2#3% - \fi - \FV@UTF@octets@after{#1#2#3}} -\def\FV@UTF@four@octets#1#2#3#4{% - \ifcsname u8:\detokenize{#1#2#3#4}\endcsname - \else - #1#2#3#4% - \fi - \FV@UTF@octets@after{#1#2#3#4}} -\fi -\long\def\FVExtra@ifnextcharAny#1#2#3{% - \let\reserved@d= #1% - \def\reserved@a{#2}% - \def\reserved@b{#3}% - \futurelet\@let@token\FVExtra@ifnchAny} -\def\FVExtra@ifnchAny{% - \ifx\@let@token\reserved@d - \expandafter\reserved@a - \else - \expandafter\reserved@b - \fi} - -\long\def\FVExtra@ifnextcharVArg#1#2#3{% - \begingroup - \edef\FV@TmpSpaceCat{\the\catcode` }% - \let\do\@makeother\FVExtraDoSpecials - \catcode`\ =\FV@TmpSpaceCat\relax - \catcode`\{=1 - \catcode`\}=2 - \@ifnextchar#1{\endgroup#2}{\endgroup#3}} -\begingroup -\catcode`\*=12 -\gdef\FVExtra@ifstarVArg#1{\FVExtra@ifnextcharVArg*{\@firstoftwo{#1}}} -\endgroup -\def\FV@ReadOArgContinue#1[#2]{#1{#2}} -\newcommand{\FVExtraReadOArgBeforeVArg}[2][]{% - \FVExtra@ifnextcharVArg[% - {\FV@ReadOArgContinue{#2}}% - {\FV@ReadOArgContinue{#2}[#1]}} -\newcommand{\FVExtraReadOArgBeforeVEnv}[2][]{% - \begingroup - \catcode`\^^M=\active - \@ifnextchar[% - {\endgroup\FVExtraReadOArgBeforeVEnv@i{#2}}% - {\endgroup\FVExtraReadOArgBeforeVEnv@i{#2}[#1]}} -\def\FVExtraReadOArgBeforeVEnv@i#1[#2]{% - \begingroup - \catcode`\^^M=\active - \FVExtraReadOArgBeforeVEnv@ii{#1}{#2}} -\begingroup -\catcode`\^^M=\active% -\gdef\FVExtraReadOArgBeforeVEnv@ii#1#2#3^^M{% - \endgroup% - \FVExtraReadOArgBeforeVEnv@iii{#1}{#2}{#3}}% -\endgroup% -\def\FVExtraReadOArgBeforeVEnv@iii#1#2#3{% - \if\relax\detokenize{#3}\relax - \else - \PackageError{fvextra}% - {Discarded invalid text while checking for optional argument of verbatim environment}% - {Discarded invalid text while checking for optional argument of verbatim environment}% - \fi - #1{#2}} -\def\FVExtraReadVArg#1{% - \begingroup - \ifFV@pdfTeXinputenc - \ifdefstring{\inputencodingname}{utf8}% - {\let\FV@ReadVArg@Char\FV@ReadVArg@Char@UTF}% - {}% - \fi - \edef\FV@TmpSpaceCat{\the\catcode` }% - \let\do\@makeother\FVExtraDoSpecials - \catcode`\^^B=\active - \FV@OuterDefSTXEmpty - \catcode`\^^C=\active - \FV@OuterDefETXEmpty - \begingroup - \catcode`\ =\FV@TmpSpaceCat\relax - \catcode`\{=1 - \catcode`\}=2 - \@ifnextchar\bgroup - {\endgroup - \catcode`\{=1 - \catcode`\}=2 - \catcode`\ =\active - \catcode`\^^I=\active - \FV@ReadVArg@Group{#1}}% - {\endgroup - \catcode`\ =\active - \catcode`\^^I=\active - \FV@ReadVArg@Char{#1}}} -\def\FVExtraReadVArgSingleLine#1{% - \begingroup - \ifFV@pdfTeXinputenc - \ifdefstring{\inputencodingname}{utf8}% - {\let\FV@ReadVArg@Char\FV@ReadVArg@Char@UTF}% - {}% - \fi - \edef\FV@TmpSpaceCat{\the\catcode` }% - \let\do\@makeother\FVExtraDoSpecials - \catcode`\^^B=\active - \FV@OuterDefSTXEmpty - \catcode`\^^C=\active - \FV@OuterDefETXEmpty - \catcode`\^^M=\active - \FV@OuterDefEOLEmpty - \begingroup - \catcode`\ =\FV@TmpSpaceCat\relax - \catcode`\{=1 - \catcode`\}=2 - \@ifnextchar\bgroup - {\endgroup - \catcode`\{=1 - \catcode`\}=2 - \catcode`\ =\active - \catcode`\^^I=\active - \FV@ReadVArg@Group{#1}}% - {\endgroup - \catcode`\ =\active - \catcode`\^^I=\active - \FV@ReadVArg@Char{#1}}} -\def\FV@ReadVArg@Group#1#2{% - \endgroup - #1{#2}} -\def\FV@ReadVArg@Char#1#2{% - \expandafter\expandafter\expandafter - \if\expandafter\expandafter\expandafter\relax\expandafter\@gobble\detokenize{#2}\relax - \expandafter\@gobble - \else - \expandafter\@firstofone - \fi - {\PackageError{fvextra}% - {Verbatim delimiters must be single characters, not commands}% - {Try a different delimiter}}% - \def\FV@ReadVArg@Char@i##1##2#2{% - \endgroup - ##1{##2}}% - \FV@ReadVArg@Char@i{#1}}% -\ifFV@pdfTeXinputenc -\def\FV@ReadVArg@Char@UTF#1#2{% - \expandafter\expandafter\expandafter - \if\expandafter\expandafter\expandafter\relax\expandafter\@gobble\detokenize{#2}\relax - \expandafter\@gobble - \else - \expandafter\@firstofone - \fi - {\PackageError{fvextra}% - {Verbatim delimiters must be single characters, not commands}% - {Try a different delimiter}}% - \ifcsname FV@U8:\detokenize{#2}\endcsname - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {\def\FV@UTF@octets@after##1{\FV@ReadVArg@Char@UTF@i{#1}{##1}}% - \csname FV@U8:\detokenize{#2}\endcsname#2}% - {\FV@ReadVArg@Char@UTF@i{#1}{#2}}} -\def\FV@ReadVArg@Char@UTF@i#1#2{% - \def\FV@ReadVArg@Char@i##1##2#2{% - \endgroup - ##1{##2}}% - \FV@ReadVArg@Char@i{#1}}% -\fi -\newbool{FV@vargsingleline} -\define@booleankey{FV}{vargsingleline}% - {\booltrue{FV@vargsingleline}} - {\boolfalse{FV@vargsingleline}} -\fvset{vargsingleline=false} -\def\FVExtrapdfstringdef#1#2{% - \AfterPreamble{% - \ifcsname pdfstringdef\endcsname - \ifx\pdfstringdef\relax - \else - \pdfstringdef#1{#2}% - \fi\fi}} -\def\FVExtrapdfstringdefDisableCommands#1{% - \AfterPreamble{% - \ifcsname pdfstringdefDisableCommands\endcsname - \ifx\pdfstringdefDisableCommands\relax - \else - \pdfstringdefDisableCommands{#1}% - \fi\fi}} -\long\def\FVExtraAlwaysUnexpanded#1{% - \unexpanded{\FVExtraAlwaysUnexpanded{#1}}} -\FVExtrapdfstringdefDisableCommands{% - \long\def\FVExtraAlwaysUnexpanded#1{#1}} -\newbool{FVExtraRobustCommandExpanded} -\protected\def\FVExtraRobustCommand#1#2{% - \ifx#2\FVExtraAlwaysUnexpanded - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {\booltrue{FVExtraRobustCommandExpanded}\FV@RobustCommand@i{#1}}% - {\boolfalse{FVExtraRobustCommandExpanded}#1}} -\FVExtrapdfstringdefDisableCommands{% - \def\FVExtraRobustCommand{}} -\def\FV@RobustCommand@i#1#2{\expandafter#1\@gobble#2} -\def\FVExtraUnexpandedReadStarOArgMArg#1#{% - \FV@UnexpandedReadStarOArgMArg@i{#1}} -\def\FV@UnexpandedReadStarOArgMArg@i#1#2{% - \FVExtraAlwaysUnexpanded{\FVExtraUnexpandedReadStarOArgMArg#1{#2}}} -\FVExtrapdfstringdefDisableCommands{% - \makeatletter - \def\FV@UnexpandedReadStarOArgMArg@i#1#2{#2}% - \makeatother} -\def\FVExtraUseVerbUnexpandedReadStarOArgMArg#1#{% - \FV@UseVerbUnexpandedReadStarOArgMArg@i{#1}} -\def\FV@UseVerbUnexpandedReadStarOArgMArg@i#1#2{% - \FVExtraAlwaysUnexpanded{\FVExtraUseVerbUnexpandedReadStarOArgMArg#1{#2}}} -\FVExtrapdfstringdefDisableCommands{% - \makeatletter - \def\FV@UseVerbUnexpandedReadStarOArgMArg@i#1#2{% - \ifcsname FV@SVRaw@#2\endcsname - \expandafter\expandafter\expandafter\FVExtraPDFStringVerbatimDetokenize - \expandafter\expandafter\expandafter{\csname FV@SVRaw@#2\endcsname}% - \fi}% - \makeatother} -\def\FVExtraUnexpandedReadStarOArgBVArg#1#{% - \FV@UnexpandedReadStarOArgBVArg@i{#1}} -\def\FV@UnexpandedReadStarOArgBVArg@i#1#2{% - \FVExtraAlwaysUnexpanded{\FVExtraUnexpandedReadStarOArgBVArg#1{#2}}} -\FVExtrapdfstringdefDisableCommands{% - \makeatletter - \def\FV@UnexpandedReadStarOArgBVArg@i#1#2{% - \FVExtraPDFStringVerbatimDetokenize{#2}}% - \makeatother} -\def\FVExtraUnexpandedReadStarOArgBEscVArg#1#{% - \FV@UnexpandedReadStarOArgBEscVArg@i{#1}} -\def\FV@UnexpandedReadStarOArgBEscVArg@i#1#2{% - \FVExtraAlwaysUnexpanded{\FVExtraUnexpandedReadStarOArgBEscVArg#1{#2}}} -\FVExtrapdfstringdefDisableCommands{% - \makeatletter - \def\FV@UnexpandedReadStarOArgBEscVArg@i#1#2{% - \FVExtraPDFStringEscapedVerbatimDetokenize{#2}}% - \makeatother} -\def\FVExtraUnexpandedReadStarOArgMArgBVArg#1#{% - \FV@UnexpandedReadStarOArgMArgBVArg@i{#1}} -\def\FV@UnexpandedReadStarOArgMArgBVArg@i#1#2{% - \FV@UnexpandedReadStarOArgMArgBVArg@ii{#1}{#2}} -\def\FV@UnexpandedReadStarOArgMArgBVArg@ii#1#2#3#{% - \FV@UnexpandedReadStarOArgMArgBVArg@iii{#1}{#2}{#3}} -\def\FV@UnexpandedReadStarOArgMArgBVArg@iii#1#2#3#4{% - \FVExtraAlwaysUnexpanded{\FVExtraUnexpandedReadStarOArgMArgBVArg#1{#2}#3{#4}}} -\FVExtrapdfstringdefDisableCommands{% - \makeatletter - \def\FV@UnexpandedReadStarOArgMArgBVArg@iii#1#2#3#4{% - \FVExtraPDFStringVerbatimDetokenize{#4}}% - \makeatother} -\def\FVExtraPDFStringEscapeChar#1{% - \ifcsname FV@PDFStringEscapeChar@#1\endcsname - \csname FV@PDFStringEscapeChar@#1\endcsname - \else - #1% - \fi} -\begingroup -\catcode`\&=14 -\catcode`\%=12& -\catcode`\(=12& -\catcode`\)=12& -\catcode`\^^J=12& -\catcode`\^^M=12& -\catcode`\^^I=12& -\catcode`\^^H=12& -\catcode`\^^L=12& -\catcode`\!=0\relax& -!catcode`!\=12!relax& -!expandafter!gdef!csname FV@PDFStringEscapeChar@\!endcsname{\\}& -!expandafter!gdef!csname FV@PDFStringEscapeChar@%!endcsname{\%}& -!expandafter!gdef!csname FV@PDFStringEscapeChar@(!endcsname{\(}& -!expandafter!gdef!csname FV@PDFStringEscapeChar@)!endcsname{\)}& -!expandafter!gdef!csname FV@PDFStringEscapeChar@^^J!endcsname{\n}& -!expandafter!gdef!csname FV@PDFStringEscapeChar@^^M!endcsname{\r}& -!expandafter!gdef!csname FV@PDFStringEscapeChar@^^I!endcsname{\t}& -!expandafter!gdef!csname FV@PDFStringEscapeChar@^^H!endcsname{\b}& -!expandafter!gdef!csname FV@PDFStringEscapeChar@^^L!endcsname{\f}& -!catcode`!\=0!relax& -\endgroup -\def\FVExtraPDFStringEscapeChars#1{% - \FV@PDFStringEscapeChars#1\FV@Sentinel} -\def\FV@PDFStringEscapeChars#1{% - \ifx#1\FV@Sentinel - \else - \FVExtraPDFStringEscapeChar{#1}% - \expandafter\FV@PDFStringEscapeChars - \fi}% -\begingroup -\catcode`\ =10 -\catcode`\a=11 -\catcode`\<=11 -\catcode`\>=11 -\catcode`\^^C=\active -\gdef\FVExtraVerbatimDetokenize#1{% - \FV@VDetok@Scan{}#1^^C \FV@} -\gdef\FV@VDetok@Scan#1 #2\FV@{% - \if\relax\detokenize{#2}\relax - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {\FV@VDetok@ScanEnd#1}% - {\FV@VDetok@ScanCont{#1}{#2}}} -\gdef\FV@VDetok@ScanEnd#1^^C{% - \if\relax\detokenize{#1}\relax - \expandafter\@gobble - \else - \expandafter\@firstofone - \fi - {\expandafter\FV@VDetok@ScanGroup\@gobble#1{\FV@}}} -\begingroup -\catcode`\ =12% -\gdef\FV@VDetok@ScanCont#1#2{% -\if\relax\detokenize{#1}\relax% -\expandafter\@gobble% -\else% -\expandafter\@firstofone% -\fi% -{\expandafter\FV@VDetok@ScanGroup\@gobble#1{\FV@}}% - %<-catcode 12 space -\FV@VDetok@Scan{}#2\FV@}% -\endgroup -\gdef\FV@VDetok@ScanGroup#1#{% - \FV@VDetok@ScanToken#1\FV@Sentinel - \FV@VDetok@ScanGroup@i} -\gdef\FV@VDetok@ScanGroup@i#1{% - \if\relax\detokenize{#1}\relax - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {\FV@VDetok@ScanEmptyGroup}% - {\FV@VDetok@ScanGroup@ii{}#1\FV@^^C}} -\begingroup -\catcode`\(=1 -\catcode`\)=2 -\catcode`\{=12 -\catcode`\}=12 -\gdef\FV@VDetok@ScanEmptyGroup({}\FV@VDetok@ScanGroup) -\endgroup -\begingroup -\catcode`\(=1 -\catcode`\)=2 -\catcode`\{=12 -\catcode`\}=12 -\gdef\FV@VDetok@ScanGroup@ii#1\FV@#2^^C(% - \if\relax\detokenize(#2)\relax - \expandafter\@firstofone - \else - \expandafter\@gobble - \fi - ({\FV@VDetok@Scan#1^^C \FV@}\FV@VDetok@ScanGroup)) -\endgroup -\gdef\FV@VDetok@ScanToken#1{% - \ifx\FV@Sentinel#1% - \expandafter\@gobble - \else - \expandafter\@firstofone - \fi - {\expandafter\FV@VDetok@ScanToken@i\detokenize{#1}^^C \FV@}} -\gdef\FV@VDetok@ScanToken@i#1 #2\FV@{% - \if\relax\detokenize{#2}\relax - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {\FV@VDetok@ScanTokenNoSpace#1}% - {\FV@VDetok@ScanTokenWithSpace{#1}}} -\gdef\FV@VDetok@ScanTokenNoSpace#1^^C{#1\FV@VDetok@ScanToken} -\gdef\FV@VDetok@ScanTokenWithSpace#1{% - \if\relax\detokenize{#1}\relax - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {\FV@VDetok@ScanTokenActiveSpace}% - {\FV@VDetok@ScanTokenWithSpace@i#1\FV@}} -\begingroup -\catcode`\ =12% -\gdef\FV@VDetok@ScanTokenActiveSpace{ \FV@VDetok@ScanToken}% -\endgroup -\gdef\FV@VDetok@ScanTokenWithSpace@i#1#2\FV@{% - \if\relax\detokenize{#2}\relax - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {\FV@VDetok@ScanTokenEscSpace{#1}}% - {\FV@VDetok@ScanTokenCW{#1#2}}} -\begingroup -\catcode`\ =12% -\gdef\FV@VDetok@ScanTokenEscSpace#1{#1 \FV@VDetok@ScanToken}% -\endgroup -\begingroup -\catcode`\ =12% -\gdef\FV@VDetok@ScanTokenCW#1#2{% -\ifcat\noexpand#2a% -\expandafter\@firstoftwo% -\else% -\expandafter\@secondoftwo% -\fi% -{#1 \FV@VDetok@ScanToken#2}% -{#1\FV@VDetok@ScanToken#2}}% -\endgroup -\gdef\FVExtraPDFStringVerbatimDetokenize#1{% - \FV@PDFStrVDetok@Scan{}#1^^C \FV@} -\gdef\FV@PDFStrVDetok@Scan#1 #2\FV@{% - \if\relax\detokenize{#2}\relax - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {\FV@PDFStrVDetok@ScanEnd#1}% - {\FV@PDFStrVDetok@ScanCont{#1}{#2}}} -\gdef\FV@PDFStrVDetok@ScanEnd#1^^C{% - \if\relax\detokenize{#1}\relax - \expandafter\@gobble - \else - \expandafter\@firstofone - \fi - {\expandafter\FV@PDFStrVDetok@ScanGroup\@gobble#1{\FV@}}} -\begingroup -\catcode`\ =12% -\gdef\FV@PDFStrVDetok@ScanCont#1#2{% -\if\relax\detokenize{#1}\relax% -\expandafter\@gobble% -\else% -\expandafter\@firstofone% -\fi% -{\expandafter\FV@PDFStrVDetok@ScanGroup\@gobble#1{\FV@}}% - %<-catcode 12 space -\FV@PDFStrVDetok@Scan{}#2\FV@}% -\endgroup -\gdef\FV@PDFStrVDetok@ScanGroup#1#{% - \FV@PDFStrVDetok@ScanToken#1\FV@Sentinel - \FV@PDFStrVDetok@ScanGroup@i} -\gdef\FV@PDFStrVDetok@ScanGroup@i#1{% - \if\relax\detokenize{#1}\relax - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {\FV@PDFStrVDetok@ScanEmptyGroup}% - {\FV@PDFStrVDetok@ScanGroup@ii{}#1\FV@^^C}} -\begingroup -\catcode`\(=1 -\catcode`\)=2 -\catcode`\{=12 -\catcode`\}=12 -\gdef\FV@PDFStrVDetok@ScanEmptyGroup({}\FV@PDFStrVDetok@ScanGroup) -\endgroup -\begingroup -\catcode`\(=1 -\catcode`\)=2 -\catcode`\{=12 -\catcode`\}=12 -\gdef\FV@PDFStrVDetok@ScanGroup@ii#1\FV@#2^^C(% - \if\relax\detokenize(#2)\relax - \expandafter\@firstofone - \else - \expandafter\@gobble - \fi - ({\FV@PDFStrVDetok@Scan#1^^C \FV@}\FV@PDFStrVDetok@ScanGroup)) -\endgroup -\gdef\FV@PDFStrVDetok@ScanToken#1{% - \ifx\FV@Sentinel#1% - \expandafter\@gobble - \else - \expandafter\@firstofone - \fi - {\expandafter\FV@PDFStrVDetok@ScanToken@i\detokenize{#1}^^C \FV@}} -\gdef\FV@PDFStrVDetok@ScanToken@i#1 #2\FV@{% - \if\relax\detokenize{#2}\relax - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {\FV@PDFStrVDetok@ScanTokenNoSpace#1}% - {\FV@PDFStrVDetok@ScanTokenWithSpace{#1}}} -\gdef\FV@PDFStrVDetok@ScanTokenNoSpace#1^^C{% - \FVExtraPDFStringEscapeChars{#1}\FV@PDFStrVDetok@ScanToken} -\gdef\FV@PDFStrVDetok@ScanTokenWithSpace#1{% - \if\relax\detokenize{#1}\relax - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {\FV@PDFStrVDetok@ScanTokenActiveSpace}% - {\FV@PDFStrVDetok@ScanTokenWithSpace@i#1\FV@}} -\begingroup -\catcode`\!=0\relax -\catcode`\\=12!relax -!gdef!FV@PDFStrVDetok@ScanTokenActiveSpace{\040!FV@PDFStrVDetok@ScanToken}% -!catcode`!\=0!relax -\endgroup -\gdef\FV@PDFStrVDetok@ScanTokenWithSpace@i#1#2\FV@{% - \if\relax\detokenize{#2}\relax - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {\FV@PDFStrVDetok@ScanTokenEscSpace{#1}}% - {\FV@PDFStrVDetok@ScanTokenCW{#1#2}}} -\begingroup -\catcode`\!=0\relax -\catcode`\\=12!relax -!gdef!FV@PDFStrVDetok@ScanTokenEscSpace#1{% - !FVExtraPDFStringEscapeChar{#1}\040!FV@PDFStrVDetok@ScanToken}% -!catcode`!\=0!relax -\endgroup -\begingroup -\catcode`\ =12% -\gdef\FV@PDFStrVDetok@ScanTokenCW#1#2{% -\ifcat\noexpand#2a% -\expandafter\@firstoftwo% -\else% -\expandafter\@secondoftwo% -\fi% -{\FVExtraPDFStringEscapeChars{#1} \FV@PDFStrVDetok@ScanToken#2}% -{\FVExtraPDFStringEscapeChars{#1}\FV@PDFStrVDetok@ScanToken#2}} -\endgroup -\gdef\FVExtraEscapedVerbatimDetokenize#1{% - \FV@EscVDetok@Scan{}#1^^C \FV@} -\gdef\FV@EscVDetok@Scan#1 #2\FV@{% - \if\relax\detokenize{#2}\relax - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {\FV@EscVDetok@ScanEnd#1}% - {\FV@EscVDetok@ScanCont{#1}{#2}}} -\gdef\FV@EscVDetok@ScanEnd#1^^C{% - \if\relax\detokenize{#1}\relax - \expandafter\@gobble - \else - \expandafter\@firstofone - \fi - {\expandafter\FV@EscVDetok@ScanGroup\@gobble#1{\FV@}}} -\begingroup -\catcode`\ =12% -\gdef\FV@EscVDetok@ScanCont#1#2{% -\if\relax\detokenize{#1}\relax% -\expandafter\@gobble% -\else% -\expandafter\@firstofone% -\fi% -{\expandafter\FV@EscVDetok@ScanGroup\@gobble#1{\FV@}}% - %<-catcode 12 space -\FV@EscVDetok@Scan{}#2\FV@}% -\endgroup -\gdef\FV@EscVDetok@ScanGroup#1#{% - \FV@EscVDetok@ScanToken#1\FV@Sentinel - \FV@EscVDetok@ScanGroup@i} -\gdef\FV@EscVDetok@ScanGroup@i#1{% - \if\relax\detokenize{#1}\relax - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {\FV@EscVDetok@ScanEmptyGroup}% - {\FV@EscVDetok@ScanGroup@ii{}#1\FV@^^C}} -\begingroup -\catcode`\(=1 -\catcode`\)=2 -\catcode`\{=12 -\catcode`\}=12 -\gdef\FV@EscVDetok@ScanEmptyGroup({}\FV@EscVDetok@ScanGroup) -\endgroup -\begingroup -\catcode`\(=1 -\catcode`\)=2 -\catcode`\{=12 -\catcode`\}=12 -\gdef\FV@EscVDetok@ScanGroup@ii#1\FV@#2^^C(% - \if\relax\detokenize(#2)\relax - \expandafter\@firstofone - \else - \expandafter\@gobble - \fi - ({\FV@EscVDetok@Scan#1^^C \FV@}\FV@EscVDetok@ScanGroup)) -\endgroup -\gdef\FV@EscVDetok@ScanToken#1{% - \ifx\FV@Sentinel#1% - \expandafter\@gobble - \else - \expandafter\@firstofone - \fi - {\expandafter\FV@EscVDetok@ScanToken@i\detokenize{#1}^^C \FV@}} -\gdef\FV@EscVDetok@ScanToken@i#1 #2\FV@{% - \if\relax\detokenize{#2}\relax - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {\FV@EscVDetok@ScanTokenNoSpace#1}% - {\FV@EscVDetok@ScanTokenWithSpace{#1}}} -\gdef\FV@EscVDetok@ScanTokenNoSpace#1#2^^C{% - \if\relax\detokenize{#2}\relax - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {#1\FV@EscVDetok@ScanToken}% - {#2\FV@EscVDetok@ScanToken}} -\gdef\FV@REscVDetok@ScanTokenNoSpace#1#2^^C{% - \if\relax\detokenize{#2}\relax - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {#1\FV@EscVDetok@ScanToken}% - {\ifcsname FV@Special:\detokenize{#2}\endcsname#2\else\noexpand\FV@\fi - \FV@EscVDetok@ScanToken}} -\gdef\FV@EscVDetok@ScanTokenWithSpace#1{% - \if\relax\detokenize{#1}\relax - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {\FV@EscVDetok@ScanTokenActiveSpace}% - {\FV@EscVDetok@ScanTokenWithSpace@i#1\FV@}} -\begingroup -\catcode`\ =12% -\gdef\FV@EscVDetok@ScanTokenActiveSpace{ \FV@EscVDetok@ScanToken}% -\endgroup -\gdef\FV@EscVDetok@ScanTokenWithSpace@i#1#2\FV@{% - \if\relax\detokenize{#2}\relax - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {\FV@EscVDetok@ScanTokenEscSpace{#1}}% - {\FV@EscVDetok@ScanTokenCW{#1}{#2}}} -\gdef\FV@REscVDetok@ScanTokenWithSpace@i#1#2\FV@{% - \if\relax\detokenize{#2}\relax - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {\FV@EscVDetok@ScanTokenEscSpace{#1}}% - {\noexpand\FV@\FV@EscVDetok@ScanToken}} -\begingroup -\catcode`\ =12% -\gdef\FV@EscVDetok@ScanTokenEscSpace#1{ \FV@EscVDetok@ScanToken}% -\endgroup -\begingroup -\catcode`\ =12% -\gdef\FV@EscVDetok@ScanTokenCW#1#2#3{% -\ifcat\noexpand#2a% -\expandafter\@firstoftwo% -\else% -\expandafter\@secondoftwo% -\fi% -{#2 \FV@EscVDetok@ScanToken#3}% -{#2\FV@EscVDetok@ScanToken#3}} -\endgroup -\gdef\FVExtraPDFStringEscapedVerbatimDetokenize#1{% - \FV@PDFStrEscVDetok@Scan{}#1^^C \FV@} -\gdef\FV@PDFStrEscVDetok@Scan#1 #2\FV@{% - \if\relax\detokenize{#2}\relax - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {\FV@PDFStrEscVDetok@ScanEnd#1}% - {\FV@PDFStrEscVDetok@ScanCont{#1}{#2}}} -\gdef\FV@PDFStrEscVDetok@ScanEnd#1^^C{% - \if\relax\detokenize{#1}\relax - \expandafter\@gobble - \else - \expandafter\@firstofone - \fi - {\expandafter\FV@PDFStrEscVDetok@ScanGroup\@gobble#1{\FV@}}} -\begingroup -\catcode`\!=0\relax -\catcode`\\=12!relax -!gdef!FV@PDFStrEscVDetok@ScanCont#1#2{% - !if!relax!detokenize{#1}!relax - !expandafter!@gobble - !else - !expandafter!@firstofone - !fi - {!expandafter!FV@PDFStrEscVDetok@ScanGroup!@gobble#1{!FV@}}% - \040%<-space - !FV@PDFStrEscVDetok@Scan{}#2!FV@}% -!catcode`!\=0!relax -\endgroup -\gdef\FV@PDFStrEscVDetok@ScanGroup#1#{% - \FV@PDFStrEscVDetok@ScanToken#1\FV@Sentinel - \FV@PDFStrEscVDetok@ScanGroup@i} -\gdef\FV@PDFStrEscVDetok@ScanGroup@i#1{% - \if\relax\detokenize{#1}\relax - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {\FV@PDFStrEscVDetok@ScanEmptyGroup}% - {\FV@PDFStrEscVDetok@ScanGroup@ii{}#1\FV@^^C}} -\begingroup -\catcode`\(=1 -\catcode`\)=2 -\catcode`\{=12 -\catcode`\}=12 -\gdef\FV@PDFStrEscVDetok@ScanEmptyGroup({}\FV@PDFStrEscVDetok@ScanGroup) -\endgroup -\begingroup -\catcode`\(=1 -\catcode`\)=2 -\catcode`\{=12 -\catcode`\}=12 -\gdef\FV@PDFStrEscVDetok@ScanGroup@ii#1\FV@#2^^C(% - \if\relax\detokenize(#2)\relax - \expandafter\@firstofone - \else - \expandafter\@gobble - \fi - ({\FV@PDFStrEscVDetok@Scan#1^^C \FV@}\FV@PDFStrEscVDetok@ScanGroup)) -\endgroup -\gdef\FV@PDFStrEscVDetok@ScanToken#1{% - \ifx\FV@Sentinel#1% - \expandafter\@gobble - \else - \expandafter\@firstofone - \fi - {\expandafter\FV@PDFStrEscVDetok@ScanToken@i\detokenize{#1}^^C \FV@}} -\gdef\FV@PDFStrEscVDetok@ScanToken@i#1 #2\FV@{% - \if\relax\detokenize{#2}\relax - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {\FV@PDFStrEscVDetok@ScanTokenNoSpace#1}% - {\FV@PDFStrEscVDetok@ScanTokenWithSpace{#1}}} -\gdef\FV@PDFStrEscVDetok@ScanTokenNoSpace#1#2^^C{% - \if\relax\detokenize{#2}\relax - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {\FVExtraPDFStringEscapeChar{#1}\FV@PDFStrEscVDetok@ScanToken}% - {\FVExtraPDFStringEscapeChar{#2}\FV@PDFStrEscVDetok@ScanToken}} -\gdef\FV@PDFStrEscVDetok@ScanTokenWithSpace#1{% - \if\relax\detokenize{#1}\relax - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {\FV@PDFStrEscVDetok@ScanTokenActiveSpace}% - {\FV@PDFStrEscVDetok@ScanTokenWithSpace@i#1\FV@}} -\begingroup -\catcode`\!=0\relax -\catcode`\\=12!relax -!gdef!FV@PDFStrEscVDetok@ScanTokenActiveSpace{\040!FV@PDFStrEscVDetok@ScanToken}% -!catcode`!\=0!relax -\endgroup -\gdef\FV@PDFStrEscVDetok@ScanTokenWithSpace@i#1#2\FV@{% - \if\relax\detokenize{#2}\relax - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {\FV@PDFStrEscVDetok@ScanTokenEscSpace{#1}}% - {\FV@PDFStrEscVDetok@ScanTokenCW{#1}{#2}}} -\begingroup -\catcode`\!=0\relax -\catcode`\\=12!relax -!gdef!FV@PDFStrEscVDetok@ScanTokenEscSpace#1{\040!FV@PDFStrEscVDetok@ScanToken} -!catcode`!\=0!relax -\endgroup -\begingroup -\catcode`\ =12% -\gdef\FV@PDFStrEscVDetok@ScanTokenCW#1#2#3{% -\ifcat\noexpand#2a% -\expandafter\@firstoftwo% -\else% -\expandafter\@secondoftwo% -\fi% -{\FVExtraPDFStringEscapeChars{#2} \FV@PDFStrEscVDetok@ScanToken#3}% -{\FVExtraPDFStringEscapeChars{#2}\FV@PDFStrEscVDetok@ScanToken#3}} -\endgroup -\gdef\FVExtraDetokenizeVArg#1#2{% - \begingroup - \catcode`\^^C=\active - \let^^C\FV@Sentinel - \edef\FV@Tmp{\FVExtraVerbatimDetokenize{#2}}% - \expandafter\FV@DetokenizeVArg@i\expandafter{\FV@Tmp}{#1}} -\gdef\FV@DetokenizeVArg@i#1#2{% - \endgroup - #2{#1}} -\gdef\FVExtraDetokenizeEscVArg#1#2{% - \begingroup - \catcode`\^^C=\active - \let^^C\FV@Sentinel - \edef\FV@Tmp{\FVExtraEscapedVerbatimDetokenize{#2}}% - \expandafter\FV@DetokenizeVArg@i\expandafter{\FV@Tmp}{#1}} -\gdef\FVExtraDetokenizeREscVArg#1#2{% - \begingroup - \catcode`\^^C=\active - \let^^C\FV@Sentinel - \let\FV@EscVDetok@ScanTokenNoSpace\FV@REscVDetok@ScanTokenNoSpace - \let\FV@EscVDetok@ScanTokenWithSpace@i\FV@REscVDetok@ScanTokenWithSpace@i - \edef\FV@Tmp{\FVExtraEscapedVerbatimDetokenize{#2}}% - \expandafter\FV@DetokenizeREscVArg@InvalidEscapeCheck\FV@Tmp\FV@\FV@ - \expandafter\FV@DetokenizeVArg@i\expandafter{\FV@Tmp}{#1}} -\gdef\FV@DetokenizeREscVArg@InvalidEscapeCheck#1\FV@#2\FV@{% - \if\relax\detokenize{#2}\relax - \expandafter\@gobble - \else - \expandafter\@firstofone - \fi - {\PackageError{fvextra}% - {Invalid backslash escape; only escape ASCII symbols and punctuation}% - {Only use \@backslashchar for ASCII symbols and punctuation}}} -\endgroup -\begingroup -\catcode`\^^C=\active% -\catcode`\^^M=\active% -\gdef\FV@RetokVArg@Read#1^^C^^M{% - \endgroup% - \def\FV@TmpRetoked{#1}}% -\endgroup -\begingroup -\catcode`\^^B=\active -\catcode`\^^C=\active -\gdef\FVExtraRetokenizeVArg#1#2#3{% - \begingroup - #2% - \catcode`\^^B=\active - \catcode`\^^C=\active - \catcode`\^^M=\active - \let^^B\FV@RetokVArg@Read - \let^^C\@empty - \FV@DefEOLEmpty - \scantokens{^^B#3^^C}% - \expandafter\FV@RetokenizeVArg@i\expandafter{\FV@TmpRetoked}{#1}}% -\gdef\FV@RetokenizeVArg@i#1#2{% - #2{#1}} -\endgroup -\let\FV@FormattingPrep@PreHook\@empty -\let\FV@FormattingPrep@PostHook\@empty -\expandafter\def\expandafter\FV@FormattingPrep\expandafter{% - \expandafter\FV@FormattingPrep@PreHook\FV@FormattingPrep\FV@FormattingPrep@PostHook} -\let\FV@PygmentsHook\relax -\g@addto@macro\FV@FormattingPrep@PreHook{\FV@PygmentsHook} -\edef\FV@hashchar{\string#} -\edef\FV@dollarchar{\string$} -\edef\FV@ampchar{\string&} -\edef\FV@underscorechar{\string_} -\edef\FV@caretchar{\string^} -\edef\FV@tildechar{\string~} -\edef\FV@leftsquarebracket{\string[} -\edef\FV@rightsquarebracket{\string]} -\edef\FV@commachar{\string,} -\newcommand{\FV@EscChars}{% - \let\#\FV@hashchar - \let\%\@percentchar - \let\{\@charlb - \let\}\@charrb - \let\$\FV@dollarchar - \let\&\FV@ampchar - \let\_\FV@underscorechar - \let\^\FV@caretchar - \let\\\@backslashchar - \let~\FV@tildechar - \let\~\FV@tildechar - \let\[\FV@leftsquarebracket - \let\]\FV@rightsquarebracket - \let\,\FV@commachar -} %$ <- highlighting -\def\FV@InlineKeyValues{} -\def\fvinlineset#1{% - \expandafter\def\expandafter\FV@InlineKeyValues\expandafter{% - \FV@InlineKeyValues#1,}} - -\def\FV@UseInlineKeyValues{% - \expandafter\fvset\expandafter{\FV@InlineKeyValues}% - \FV@ApplyBreakAnywhereInlineStretch} -\newbool{FV@extra} -\define@booleankey{FV}{extra}% - {\booltrue{FV@extra}}% - {\boolfalse{FV@extra}} -\fvset{extra=true} -\def\FancyVerbFormatInline#1{#1} -\def\Verb{% - \FVExtraRobustCommand\RobustVerb\FVExtraUnexpandedReadStarOArgBVArg} -\protected\def\RobustVerb{\FV@Command{}{Verb}} -\FVExtrapdfstringdefDisableCommands{% - \def\RobustVerb{}} -\let\FVC@Verb@FV\FVC@Verb -\def\FVC@Verb{% - \begingroup - \FV@UseInlineKeyValues\FV@UseKeyValues - \ifFV@extra - \expandafter\endgroup\expandafter\FVC@Verb@Extra - \else - \expandafter\endgroup\expandafter\FVC@Verb@FV - \fi} -\def\FVC@Verb@Extra{% - \ifbool{FVExtraRobustCommandExpanded}% - {\@ifnextchar\bgroup - {\FVC@Verb@Extra@i}% - {\PackageError{fvextra}% - {\string\Verb\space delimiters must be paired curly braces in this context}% - {Use curly braces as delimiters}}}% - {\FVC@Verb@Extra@i}} -\def\FVC@Verb@Extra@i{% - \begingroup - \ifbool{FV@vargsingleline}% - {\let\FV@Reader\FVExtraReadVArgSingleLine}% - {\let\FV@Reader\FVExtraReadVArg}% - \FV@Reader{% - \FV@UseInlineKeyValues\FV@UseKeyValues\FV@FormattingPrep - \FVExtraDetokenizeVArg{% - \FVExtraRetokenizeVArg{\FVC@Verb@Extra@ii}{\FV@CatCodes}}}} -\def\FVC@Verb@Extra@ii#1{% - \ifx\FancyVerbBackgroundColor\relax - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {\ifbool{FV@breaklines}% - {\FV@InsertBreaks{\FancyVerbFormatInline}{#1}}% - {\mbox{\FancyVerbFormatInline{#1}}}}% - {\setlength{\FV@TmpLength}{\fboxsep}% - \ifx\FancyVerbBackgroundColorPadding\relax - \setlength{\fboxsep}{0pt}% - \else - \setlength{\fboxsep}{\FancyVerbBackgroundColorPadding}% - \fi - \colorbox{\FancyVerbBackgroundColor}{% - \setlength{\fboxsep}{\FV@TmpLength}% - \FancyVerbBackgroundColorVPhantom\FancyVerbFormatInline{#1}}}% - \endgroup} -\let\FVC@SaveVerb@FV\FVC@SaveVerb -\def\FVC@SaveVerb{% - \begingroup - \FV@UseInlineKeyValues\FV@UseKeyValues - \ifFV@extra - \expandafter\endgroup\expandafter\FVC@SaveVerb@Extra - \else - \expandafter\endgroup\expandafter\FVC@SaveVerb@FV - \fi} -\def\FVC@SaveVerb@Extra#1{% - \@namedef{FV@SV@#1}{}% - \@namedef{FV@SVRaw@#1}{}% - \begingroup - \ifbool{FV@vargsingleline}% - {\let\FV@Reader\FVExtraReadVArgSingleLine}% - {\let\FV@Reader\FVExtraReadVArg}% - \FV@Reader{% - \FVC@SaveVerb@Extra@i{#1}}} -\def\FVC@SaveVerb@Extra@i#1#2{% - \FV@UseInlineKeyValues\FV@UseKeyValues\FV@FormattingPrep - \FVExtraDetokenizeVArg{% - \FVExtraRetokenizeVArg{\FVC@SaveVerb@Extra@ii{#1}{#2}}{\FV@CatCodes}}{#2}} -\def\FVC@SaveVerb@Extra@ii#1#2#3{% - \global\let\FV@AfterSave\FancyVerbAfterSave - \endgroup - \@namedef{FV@SV@#1}{#3}% - \@namedef{FV@SVRaw@#1}{#2}% - \FV@AfterSave}% -\newbool{FV@retokenize} -\define@booleankey{FV}{retokenize}% - {\booltrue{FV@retokenize}}{\boolfalse{FV@retokenize}} -\def\UseVerb{% - \FVExtraRobustCommand\RobustUseVerb\FVExtraUseVerbUnexpandedReadStarOArgMArg} -\protected\def\RobustUseVerb{\FV@Command{}{UseVerb}} -\FVExtrapdfstringdefDisableCommands{% - \def\RobustUseVerb{}} -\let\FVC@UseVerb@FV\FVC@UseVerb -\def\FVC@UseVerb{% - \begingroup - \FV@UseInlineKeyValues\FV@UseKeyValues - \ifFV@extra - \expandafter\endgroup\expandafter\FVC@UseVerb@Extra - \else - \expandafter\endgroup\expandafter\FVC@UseVerb@FV - \fi} -\def\FVC@UseVerb@Extra#1{% - \@ifundefined{FV@SV@#1}% - {\FV@Error{Short verbatim text never saved to name `#1'}\FV@eha}% - {\begingroup - \FV@UseInlineKeyValues\FV@UseKeyValues\FV@FormattingPrep - \ifbool{FV@retokenize}% - {\expandafter\let\expandafter\FV@Tmp\csname FV@SVRaw@#1\endcsname - \expandafter\FV@UseVerb@Extra@Retok\expandafter{\FV@Tmp}}% - {\expandafter\let\expandafter\FV@Tmp\csname FV@SV@#1\endcsname - \expandafter\FV@UseVerb@Extra\expandafter{\FV@Tmp}}}} -\def\FV@UseVerb@Extra@Retok#1{% - \FVExtraDetokenizeVArg{% - \FVExtraRetokenizeVArg{\FV@UseVerb@Extra}{\FV@CatCodes}}{#1}} -\let\FV@UseVerb@Extra\FVC@Verb@Extra@ii -\def\EscVerb{% - \FVExtraRobustCommand\RobustEscVerb\FVExtraUnexpandedReadStarOArgBEscVArg} -\protected\def\RobustEscVerb{\FV@Command{}{EscVerb}} -\FVExtrapdfstringdefDisableCommands{% - \def\RobustEscVerb{}} -\def\FVC@EscVerb{% - \@ifnextchar\bgroup - {\FVC@EscVerb@i}% - {\PackageError{fvextra}% - {Invalid argument; argument must be delimited by paired curly braces}% - {Delimit argument with curly braces}}} -\def\FVC@EscVerb@i#1{% - \begingroup - \FV@UseInlineKeyValues\FV@UseKeyValues\FV@FormattingPrep - \FVExtraDetokenizeREscVArg{% - \FVExtraRetokenizeVArg{\FVC@EscVerb@ii}{\FV@CatCodes}}{#1}} -\let\FVC@EscVerb@ii\FVC@Verb@Extra@ii -\def\VerbEnv{% - \ifcsname @currenvir\endcsname - \ifx\@currenvir\@empty - \PackageError{fvextra}{VerbEnv is an environment}{VerbEnv is an environment}% - \else - \ifx\@currenvir\relax - \PackageError{fvextra}{VerbEnv is an environment}{VerbEnv is an environment}% - \fi - \fi - \else - \PackageError{fvextra}{VerbEnv is an environment}{VerbEnv is an environment}% - \fi - \VerbatimEnvironment - \FVExtraReadOArgBeforeVEnv{\expandafter\VerbEnv@i\expandafter{\FV@EnvironName}}} -\def\VerbEnv@i#1#2{% - \begingroup - \let\do\@makeother\FVExtraDoSpecials - \catcode`\ =\active - \catcode`\^^I=\active - \catcode`\^^M=\active - \VerbEnv@ii{#1}{#2}} -\begingroup -\catcode`\!=0 -\catcode`\<=1 -\catcode`\>=2 -!catcode`!\=12 -!catcode`!{=12 -!catcode`!}=12 -!catcode`!^^M=!active% -!gdef!VerbEnv@ii#1#2#3^^M<% - !endgroup% - !def!VerbEnv@CheckLine##1\end{#1}##2!FV@Sentinel<% - !if!relax!detokenize<##2>!relax% - !else% - !PackageError% - !let!VerbEnv@iii!VerbEnv@iii@Error% - !fi>% - !VerbEnv@CheckLine#3\end{#1}!FV@Sentinel% - !VerbEnv@iii<#1><#2><#3>>% -!endgroup% -\def\VerbEnv@iii@Error#1#2#3{} -\def\VerbEnv@iii#1#2#3{% - \begingroup - \let\do\@makeother\FVExtraDoSpecials - \catcode`\ =10\relax - \catcode`\^^M=\active - \VerbEnv@iv{#1}{#2}{#3}} -\begingroup -\catcode`\!=0 -\catcode`\<=1 -\catcode`\>=2 -!catcode`!\=12 -!catcode`!{=12 -!catcode`!}=12 -!catcode`!^^M=!active% -!gdef!VerbEnv@iv#1#2#3#4^^M<% - !endgroup% - !def!VerbEnv@CheckEndDelim##1\end{#1}##2!FV@Sentinel<% - !if!relax!detokenize<##2>!relax% - !PackageError% - !let!VerbEnv@v!VerbEnv@v@Error% - !else% - !VerbEnv@CheckEndLeading##1!FV@Sentinel% - !VerbEnv@CheckEndTrailing##2!FV@Sentinel% - !fi>% - !def!VerbEnv@CheckEndTrailing##1\end{#1}!FV@Sentinel<% - !if!relax!detokenize<##1>!relax% - !else% - !PackageError% - % - % - !let!VerbEnv@v!VerbEnv@v@Error% - !fi>% - !VerbEnv@CheckEndDelim#4\end{#1}!FV@Sentinel% - !VerbEnv@v<#2><#3>>% -!endgroup -\def\VerbEnv@CheckEndLeading{% - \FVExtra@ifnextcharAny\@sptoken% - {\VerbEnv@CheckEndLeading@Continue}% - {\ifx\@let@token\FV@Sentinel - \expandafter\VerbEnv@CheckEndLeading@End - \else - \expandafter\VerbEnv@CheckEndLeading@EndError - \fi}} -\def\VerbEnv@CheckEndLeading@Continue#1{% - \VerbEnv@CheckEndLeading} -\def\VerbEnv@CheckEndLeading@End#1\FV@Sentinel{} -\def\VerbEnv@CheckEndLeading@EndError{% - \PackageError{fvextra}% - {Discarded text before end of environment \FV@EnvironName}% - {Discarded text before end of environment \FV@EnvironName}% - \let\VerbEnv@v\VerbEnv@v@Error} -\def\VerbEnv@v@Error#1#2{} -\def\VerbEnv@v#1#2{% - \Verb[#1]{#2}% - \expandafter\end\expandafter{\FV@EnvironName}} -\def\endVerbEnv{\global\let\FV@EnvironName\relax} -\define@key{FV}{writefilehandle}{% - \FV@SetWrite#1\FV@Sentinel} -\def\FV@SetWrite#1#2\FV@Sentinel{% - \let\FancyVerbWriteFileHandle\relax - \if\relax\detokenize{#2}\relax - \let\FancyVerbWriteFileHandle#1\relax - \fi - \ifx\FancyVerbWriteFileHandle\relax - \PackageError{fvextra}% - {Missing or invalid file handle for write}% - {Need file handle from \string\newwrite}% - \fi} -\let\FancyVerbWriteFileHandle\relax -\define@key{FV}{writer}{% - \let\FV@Writer#1\relax} -\def\FancyVerbDefaultWriter#1{% - \immediate\write\FancyVerbWriteFileHandle{\detokenize{#1}}} -\fvset{writer=\FancyVerbDefaultWriter} -\newcounter{FancyVerbWriteLine} -\def\VerbatimWrite{% - \FV@Environment - {codes=,commandchars=none,commentchar=none,defineactive,% - gobble=0,formatcom=,firstline,lastline}% - {VerbatimWrite}} -\def\FVB@VerbatimWrite{% - \@bsphack - \begingroup - \setcounter{FancyVerbWriteLine}{0}% - \let\c@FancyVerbLine\c@FancyVerbWriteLine - \FV@UseKeyValues - \FV@DefineWhiteSpace - \def\FV@Space{\space}% - \FV@DefineTabOut - \let\FV@ProcessLine\FV@Writer - \let\FV@FontScanPrep\relax - \let\@noligs\relax - \FancyVerbDefineActive - \FancyVerbFormatCom - \FV@Scan} -\def\FVE@VerbatimWrite{% - \endgroup - \@esphack} -\def\endVerbatimWrite{\FVE@VerbatimWrite} -\define@key{FV}{afterbuffer}{% - \def\FV@afterbuffer{#1}} -\fvset{afterbuffer=} -\def\FancyVerbBufferIndex{0} -\define@key{FV}{bufferer}{% - \let\FV@Bufferer=#1\relax} -\def\FancyVerbDefaultBufferer#1{% - \expandafter\xdef\csname\FancyVerbBufferLineName\FancyVerbBufferIndex\endcsname{% - \detokenize{#1}}} -\fvset{bufferer=\FancyVerbDefaultBufferer} -\define@key{FV}{bufferlengthname}{% - \ifcsname#1\endcsname - \else - \expandafter\xdef\csname#1\endcsname{0}% - \fi - \def\FV@bufferlengthname{#1}% - \expandafter\def\expandafter\FV@bufferlengthmacro\expandafter{% - \csname#1\endcsname}} -\fvset{bufferlengthname=FancyVerbBufferLength} -\define@key{FV}{bufferlinename}{% - \def\FancyVerbBufferLineName{#1}} -\fvset{bufferlinename=FancyVerbBufferLine} -\define@key{FV}{buffername}{% - \fvset{bufferlengthname=#1length,bufferlinename=#1line}} -\newbool{FV@globalbuffer} -\define@booleankey{FV}{globalbuffer}% - {\booltrue{FV@globalbuffer}}% - {\boolfalse{FV@globalbuffer}} -\fvset{globalbuffer=false} -\newcounter{FancyVerbBufferLine} -\newbool{FV@globalbuffer@tmp} -\let\FV@oldbufferlength\relax -\let\FV@bufferlengthmacro@tmp\relax -\let\FancyVerbBufferLineName@tmp\relax -\let\FV@afterbuffer@tmp\relax -\def\VerbatimBuffer{% - \FV@Environment - {codes=,commandchars=none,commentchar=none,defineactive,% - gobble=0,formatcom=,firstline,lastline}% - {VerbatimBuffer}} -\def\FVB@VerbatimBuffer{% - \@bsphack - \begingroup - \FV@UseKeyValues - \setcounter{FancyVerbBufferLine}{\FV@bufferlengthmacro}% - \let\c@FancyVerbLine\c@FancyVerbBufferLine - \xdef\FancyVerbBufferIndex{\FV@bufferlengthmacro}% - \ifbool{FV@globalbuffer}% - {\global\booltrue{FV@globalbuffer@tmp}}% - {\global\boolfalse{FV@globalbuffer@tmp}% - \expandafter\global\expandafter\let\expandafter\FV@oldbufferlength\FV@bufferlengthmacro - \global\let\FV@bufferlengthmacro@tmp\FV@bufferlengthmacro - \global\let\FancyVerbBufferLineName@tmp\FancyVerbBufferLineName}% - \global\let\FV@afterbuffer@tmp\FV@afterbuffer - \FV@DefineWhiteSpace - \def\FV@ProcessLine{% - \xdef\FancyVerbBufferIndex{\the\numexpr\FancyVerbBufferIndex+1\relax}% - \FV@Bufferer}% - \let\FV@FontScanPrep\relax - \let\@noligs\relax - \FancyVerbDefineActive - \FancyVerbFormatCom - \FV@Scan} -\def\FVE@VerbatimBuffer{% - \expandafter\xdef\FV@bufferlengthmacro{\FancyVerbBufferIndex}% - \gdef\FancyVerbBufferIndex{0}% - \endgroup - \@esphack - \begingroup - \FV@afterbuffer@tmp - \global\let\FV@afterbuffer@tmp\relax - \endgroup - \ifbool{FV@globalbuffer@tmp}% - {}% - {\loop\unless\ifnum\FV@bufferlengthmacro@tmp=\FV@oldbufferlength\relax - \expandafter\global\expandafter\let\csname - \FancyVerbBufferLineName@tmp\FV@bufferlengthmacro@tmp - \endcsname\FV@Undefined - \expandafter\xdef\FV@bufferlengthmacro@tmp{% - \the\numexpr\FV@bufferlengthmacro@tmp-1\relax}% - \repeat - \global\let\FV@bufferlengthmacro@tmp\relax - \global\let\FancyVerbBufferLineName@tmp\relax}% - \global\let\FV@oldbufferlength\relax} -\def\endVerbatimBuffer{\FVE@VerbatimBuffer} -\define@key{FV}{insertenvname}{% - \def\FV@VerbatimInsertEnvName{#1}} -\fvset{insertenvname=Verbatim} -\def\FV@Environment@InsertBuffer#1#2{% - \def\FV@KeyValues{#1}% - \FV@GetKeyValues{\@nameuse{FVB@#2}}} -\def\FV@Scan@InsertBuffer{% - \FV@CatCodes - \xdef\FV@EnvironName{\FV@VerbatimInsertEnvName}% - \ifnum\FV@bufferlengthmacro=\z@\relax - \PackageError{fvextra}% - {Buffer length macro \expandafter\string\FV@bufferlengthmacro\space is invalid or zero}% - {}% - \let\FV@GetLine\relax - \fi - \FV@BeginScanning}% -\def\VerbatimInsertBuffer@def@FV@Line#1{% - \FVExtraRetokenizeVArg{\def\FV@Line}{}{#1}} -\def\FancyVerbGetLine@VerbatimInsertBuffer{% - \ifnum\FancyVerbBufferIndex>\FV@bufferlengthmacro\relax - \global\let\FV@EnvironName\relax - \let\next\relax - \else - \ifcsname\FancyVerbBufferLineName\FancyVerbBufferIndex\endcsname - \expandafter\let\expandafter\FV@Line@Buffer - \csname\FancyVerbBufferLineName\FancyVerbBufferIndex\endcsname - \expandafter\VerbatimInsertBuffer@def@FV@Line\expandafter{\FV@Line@Buffer}% - \def\next{\FV@PreProcessLine\FV@GetLine}% - \xdef\FancyVerbBufferIndex{\the\numexpr\FancyVerbBufferIndex+1\relax}% - \else - \def\next{% - \PackageError{fvextra}% - {Buffer with line macro named - "\FancyVerbBufferLineName\FancyVerbBufferIndex" does not exist}% - {Check bufferlinename, bufferlengthname, and globalbuffer settings}% - }% - \fi - \fi - \next} -\newcommand{\VerbatimInsertBuffer}[1][]{% - \begingroup - \let\FV@Scan\FV@Scan@InsertBuffer - \let\FV@CheckScan\relax - \let\FV@Environment\FV@Environment@InsertBuffer - \let\FancyVerbGetLine\FancyVerbGetLine@VerbatimInsertBuffer - \gdef\FancyVerbBufferIndex{1}% - \VerbatimInsertBuffer@i{#1}% - \gdef\FancyVerbBufferIndex{0}% - \endgroup - \@doendpe} -\begingroup -\catcode`\^^M=\active -\gdef\VerbatimInsertBuffer@i#1{% - \begingroup% - \fvset{#1}% - \global\let\FV@CurrentVerbatimInsertEnvName\FV@VerbatimInsertEnvName% - \endgroup% - \csname \FV@CurrentVerbatimInsertEnvName\endcsname[#1]^^M% - \csname end\FV@CurrentVerbatimInsertEnvName\endcsname% - \global\let\FV@CurrentVerbatimInsertEnvName\FV@Undefined}% -\endgroup -\newcommand{\VerbatimClearBuffer}[1][]{% - \begingroup - \def\FV@KeyValues{#1}% - \FV@UseKeyValues - \xdef\FancyVerbBufferIndex{\FV@bufferlengthmacro}% - \expandafter\xdef\FV@bufferlengthmacro{0}% - \loop\unless\ifnum\FancyVerbBufferIndex<1\relax - \expandafter\global\expandafter\let - \csname\FancyVerbBufferLineName\FancyVerbBufferIndex\endcsname - \FV@Undefined - \xdef\FancyVerbBufferIndex{\the\numexpr\FancyVerbBufferIndex-1\relax}% - \repeat - \gdef\FancyVerbBufferIndex{0}% - \endgroup} -\def\FV@Command#1#2{% - \FVExtra@ifstarVArg - {\def\FV@KeyValues{#1,showspaces,showtabs}\FV@@Command{#2}}% - {\def\FV@KeyValues{#1}\FV@@Command{#2}}} -\def\FV@@Command#1{% - \FVExtra@ifnextcharVArg[% - {\FV@GetKeyValues{\@nameuse{FVC@#1}}}% - {\@nameuse{FVC@#1}}} -\def\@CustomVerbatimCommand#1#2#3#4{% - \begingroup\fvset{#4}\endgroup - \@ifundefined{FVC@#3}% - {\FV@Error{Command `\string#3' is not a FancyVerb command.}\@eha}% - {\ifcsname Robust#3\endcsname - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {\expandafter\let\expandafter\@tempa\csname #3\endcsname - \def\@tempb##1##2##3{% - \expandafter\def\expandafter\@tempc\expandafter{% - \csname Robust\expandafter\@gobble\string#2\endcsname}% - \def\@tempd####1{% - #1{#2}{##1####1##3}}% - \expandafter\@tempd\@tempc - \expandafter\protected\expandafter\def\@tempc{\FV@Command{#4}{#3}}}% - \expandafter\@tempb\@tempa}% - {#1{#2}{\FV@Command{#4}{#3}}}}} -\def\FancyVerbSpace{% - \makebox[0.5em]{% - \kern.07em - \vrule height.3ex - \hrulefill - \vrule height.3ex - \kern.07em}} -\newcounter{FV@TrueTabGroupLevel} -\def\FV@@ObeyTabs#1{% - \let\FV@Space@Orig\FV@Space - \let\FV@Space\FV@Space@ObeyTabs - \edef\FV@TmpCurrentGroupLevel{\the\currentgrouplevel}% - \setcounter{FV@TrueTabGroupLevel}{\FV@TmpCurrentGroupLevel}% - \addtocounter{FV@TrueTabGroupLevel}{1}% - \setbox\FV@TabBox=\hbox{#1}\box\FV@TabBox - \let\FV@Space\FV@Space@Orig} -\def\FV@TrueTab{% - \ifnum\value{FV@TrueTabGroupLevel}=\the\currentgrouplevel\relax - \expandafter\FV@TrueTab@NoGroup - \else - \expandafter\FV@TrueTab@Group - \fi} -\let\FV@TrueTabSaveWidth\relax -\newcounter{FV@TrueTabCounter} -\def\FV@TrueTabSaveWidth@Save{% - \expandafter\xdef\csname FV@TrueTab:Width\arabic{FV@TrueTabCounter}\endcsname{% - \number\@tempdima}% - \stepcounter{FV@TrueTabCounter}} -\def\FV@TrueTab@NoGroup{% - \egroup - \@tempdima=\FV@ObeyTabSize sp\relax - \@tempcnta=\wd\FV@TabBox - \advance\@tempcnta\FV@@ObeyTabSize\relax - \divide\@tempcnta\@tempdima - \multiply\@tempdima\@tempcnta - \advance\@tempdima-\wd\FV@TabBox - \FV@TrueTabSaveWidth - \setbox\FV@TabBox=\hbox\bgroup - \unhbox\FV@TabBox\hbox to\@tempdima{\hss\FV@TabChar}} -\newbool{FV@ObeyTabs@Whitespace@Tab} -\def\FV@TrueTab@Group{% - \booltrue{FV@ObeyTabs@Whitespace@Tab}% - \gdef\FV@TmpWhitespace{\FV@FVTabToken}% - \FV@ObeyTabs@ScanWhitespace} -\def\FV@Space@ObeyTabs{% - \ifnum\value{FV@TrueTabGroupLevel}=\the\currentgrouplevel\relax - \expandafter\FV@Space@ObeyTabs@NoGroup - \else - \expandafter\FV@Space@ObeyTabs@Group - \fi} -\def\FV@Space@ObeyTabs@NoGroup{\FV@Space@Orig} -\def\FV@Space@ObeyTabs@Group{% - \boolfalse{FV@ObeyTabs@Whitespace@Tab}% - \gdef\FV@TmpWhitespace{\FV@FVSpaceToken}% - \FV@ObeyTabs@ScanWhitespace} -\def\FV@ObeyTabs@ScanWhitespace{% - \@ifnextchar\FV@FVSpaceToken% - {\FV@TrueTab@CaptureWhitespace@Space}% - {\ifx\@let@token\FV@FVTabToken - \expandafter\FV@TrueTab@CaptureWhitespace@Tab - \else - \expandafter\FV@ObeyTabs@ResolveWhitespace - \fi}} -\def\FV@TrueTab@CaptureWhitespace@Space#1{% - \g@addto@macro\FV@TmpWhitespace{\FV@FVSpaceToken}% - \FV@ObeyTabs@ScanWhitespace} -\def\FV@TrueTab@CaptureWhitespace@Tab#1{% - \booltrue{FV@ObeyTabs@Whitespace@Tab}% - \g@addto@macro\FV@TmpWhitespace{\FV@FVTabToken}% - \FV@ObeyTabs@ScanWhitespace} -\newbox\FV@TabBox@Group -\def\FV@TrueTab@Group@Expand{% - \egroup - \@tempdima=\FV@ObeyTabSize sp\relax - \@tempcnta=\wd\FV@TabBox@Group - \advance\@tempcnta\FV@@ObeyTabSize\relax - \divide\@tempcnta\@tempdima - \multiply\@tempdima\@tempcnta - \advance\@tempdima-\wd\FV@TabBox@Group - \FV@TrueTabSaveWidth - \setbox\FV@TabBox@Group=\hbox\bgroup - \unhbox\FV@TabBox@Group\hbox to\@tempdima{\hss\FV@TabChar}} -\def\FV@ObeyTabs@ResolveWhitespace{% - \let\FV@Space\FV@Space@Orig - \let\FV@Tab\FV@TrueTab@Group@Expand - \expandafter\FV@ObeyTabs@ResolveWhitespace@i\expandafter{\FV@TmpWhitespace}% - \let\FV@Space\FV@Space@ObeyTabs - \let\FV@Tab\FV@TrueTab} -\def\FV@ObeyTabs@ResolveWhitespace@i#1{% - \ifbool{FV@ObeyTabs@Whitespace@Tab}% - {\setbox\FV@TabBox@Group=\hbox{#1}\box\FV@TabBox@Group}% - {#1}} -\def\FancyVerbMathSpace{ } -\def\FV@SetupMathSpace{% - \everymath\expandafter{\the\everymath\let\FV@Space\FancyVerbMathSpace}} -\g@addto@macro\FV@FormattingPrep@PreHook{\FV@SetupMathSpace} -\begingroup -\catcode`\'=\active -\catcode`\^=7 -\gdef\FV@pr@m@s{% - \ifx'\@let@token - \expandafter\pr@@@s - \else - \ifx^\@let@token - \expandafter\expandafter\expandafter\pr@@@t - \else - \egroup - \fi - \fi} -\endgroup -\def\FV@SetupMathFont{% - \everymath\expandafter{\the\everymath\fontfamily{\familydefault}\selectfont}} -\g@addto@macro\FV@FormattingPrep@PreHook{\FV@SetupMathFont} -\def\FV@SetupMathLigs{% - \everymath\expandafter{% - \the\everymath - \let\pr@m@s\FV@pr@m@s - \begingroup\lccode`\~=`\'\lowercase{\endgroup\def~}{% - \ifmmode\expandafter\active@math@prime\else'\fi}% - \begingroup\lccode`\~=`\`\lowercase{\endgroup\def~}{`}% - \begingroup\lccode`\~=`\<\lowercase{\endgroup\def~}{<}% - \begingroup\lccode`\~=`\>\lowercase{\endgroup\def~}{>}% - \begingroup\lccode`\~=`\,\lowercase{\endgroup\def~}{,}% - \begingroup\lccode`\~=`\-\lowercase{\endgroup\def~}{-}% - }% -} -\g@addto@macro\FV@FormattingPrep@PreHook{\FV@SetupMathLigs} -\def\FV@BeginListFrame@Lines{% - \begingroup - \lineskip\z@skip - \FV@SingleFrameLine{\z@}% - \kern-0.5\baselineskip\relax - \baselineskip\z@skip - \kern\FV@FrameSep\relax - \penalty\@M - \endgroup} -\define@key{FV}{rulecolor}{% - \ifstrempty{#1}% - {\let\FancyVerbRuleColor\relax}% - {\ifstrequal{#1}{none}% - {\let\FancyVerbRuleColor\relax}% - {\def\@tempa{#1}% - \FV@KVProcess@RuleColor#1\FV@Undefined}}} -\def\FV@KVProcess@RuleColor#1#2\FV@Undefined{% - \ifx#1\color - \else - \expandafter\def\expandafter\@tempa\expandafter{% - \expandafter\color\expandafter{\@tempa}}% - \fi - \let\FancyVerbRuleColor\@tempa} -\fvset{rulecolor=none} -\define@key{FV}{fillcolor}{% - \ifstrempty{#1}% - {\let\FancyVerbFillColor\relax}% - {\ifstrequal{#1}{none}% - {\let\FancyVerbFillColor\relax}% - {\def\@tempa{#1}% - \FV@KVProcess@FillColor#1\FV@Undefined}}} -\def\FV@KVProcess@FillColor#1#2\FV@Undefined{% - \ifx#1\color - \else - \expandafter\def\expandafter\@tempa\expandafter{% - \expandafter\color\expandafter{\@tempa}}% - \fi - \let\FancyVerbFillColor\@tempa} -\fvset{fillcolor=none} -\define@booleankey{FV}{linenos}% - {\@nameuse{FV@Numbers@left}}{\@nameuse{FV@Numbers@none}} -\define@key{FV}{tab}{\def\FancyVerbTab{#1}} -\define@key{FV}{tabcolor}% - {\ifstrempty{#1}% - {\let\FV@TabColor\relax}% - {\ifstrequal{#1}{none}% - {\let\FV@TabColor\relax}% - {\def\FV@TabColor{\textcolor{#1}}}}} -\define@booleankey{FV}{showtabs}% - {\def\FV@TabChar{\FV@TabColor{\FancyVerbTab}}}% - {\let\FV@TabChar\relax} -\fvset{tabcolor=none, showtabs=false} -\newbool{FV@showspaces} -\define@booleankey{FV}{showspaces}% - {\booltrue{FV@showspaces}}% - {\boolfalse{FV@showspaces}} -\fvset{showspaces=false} -\define@key{FV}{space}{\def\FancyVerbSpace{#1}} -\define@key{FV}{spacecolor}% - {\ifstrempty{#1}% - {\let\FV@SpaceColor\relax}% - {\ifstrequal{#1}{none}% - {\let\FV@SpaceColor\relax}% - {\def\FV@SpaceColor{\textcolor{#1}}}}} -\fvset{spacecolor=none} -\define@key{FV}{spacebreak}{% - \def\FancyVerbSpaceBreak{#1}} -\fvset{spacebreak=\discretionary{}{}{}} -\newbool{FV@breakcollapsespaces} -\define@booleankey{FV}{breakcollapsespaces}% - {\booltrue{FV@breakcollapsespaces}}% - {\boolfalse{FV@breakcollapsespaces}}% -\fvset{breakcollapsespaces=true} -\def\FV@DefFVSpace{% - \ifbool{FV@showspaces}% - {\ifbool{FV@breaklines}% - {\ifcsname FV@BreakBefore@Token\FV@SpaceCatTen\endcsname - \def\FV@Space{\FV@SpaceColor{\FancyVerbSpace}}% - \else\ifcsname FV@BreakAfter@Token\FV@SpaceCatTen\endcsname - \def\FV@Space{\FV@SpaceColor{\FancyVerbSpace}}% - \else - \def\FV@Space{\FV@SpaceColor{\FancyVerbSpace}\FancyVerbSpaceBreak}% - \fi\fi}% - {\def\FV@Space{\FV@SpaceColor{\FancyVerbSpace}}}}% - {\ifbool{FV@breaklines}% - {\ifcsname FV@BreakBefore@Token\FV@SpaceCatTen\endcsname - \def\FV@Space{\mbox{\FV@SpaceCatTen}}% - \else\ifcsname FV@BreakAfter@Token\FV@SpaceCatTen\endcsname - \def\FV@Space{\mbox{\FV@SpaceCatTen}}% - \else - \ifbool{FV@breakcollapsespaces}% - {\def\FV@Space{\FV@SpaceCatTen}}% - {\def\FV@Space{\mbox{\FV@SpaceCatTen}\FancyVerbSpaceBreak}}% - \fi\fi}% - {\def\FV@Space{\FV@SpaceCatTen}}}}% -\AtEndOfPackage{% - \g@addto@macro\FV@FormattingPrep@PreHook{\FV@DefFVSpace}} -\define@booleankey{FV}{mathescape}% - {\let\FancyVerbMathEscape\FV@MathEscape}% - {\let\FancyVerbMathEscape\relax} -\def\FV@MathEscape{\catcode`\$=3\catcode`\&=4\catcode`\^=7\catcode`\_=8\relax} -\FV@AddToHook\FV@CatCodesHook\FancyVerbMathEscape -\fvset{mathescape=false} -\define@booleankey{FV}{beameroverlays}% - {\let\FancyVerbBeamerOverlays\FV@BeamerOverlays}% - {\let\FancyVerbBeamerOverlays\relax} -\def\FV@BeamerOverlays{% - \expandafter\def\expandafter\@noligs\expandafter{\@noligs - \catcode`\<=12\catcode`\>=12\relax}} -\FV@AddToHook\FV@FormattingPrep@PreHook\FancyVerbBeamerOverlays -\fvset{beameroverlays=false} -\newbool{FV@CurlyQuotes} -\define@booleankey{FV}{curlyquotes}% - {\booltrue{FV@CurlyQuotes}}% - {\boolfalse{FV@CurlyQuotes}} -\def\FancyVerbCurlyQuotes{% - \ifbool{FV@CurlyQuotes}% - {\expandafter\def\expandafter\@noligs\expandafter{\@noligs - \begingroup\lccode`\~=`\`\lowercase{\endgroup\def~}{`}% - \begingroup\lccode`\~=`\'\lowercase{\endgroup\def~}{'}}}% - {}} -\g@addto@macro\FV@FormattingPrep@PreHook{\FancyVerbCurlyQuotes} -\fvset{curlyquotes=false} -\define@key{FV}{fontencoding}% - {\ifstrempty{#1}% - {\let\FV@FontEncoding\relax}% - {\ifstrequal{#1}{none}% - {\let\FV@FontEncoding\relax}% - {\def\FV@FontEncoding{\fontencoding{#1}}}}} -\expandafter\def\expandafter\FV@SetupFont\expandafter{% - \expandafter\FV@FontEncoding\FV@SetupFont} -\fvset{fontencoding=none} -\def\FancyVerbFormatLine#1{#1} -\def\FancyVerbFormatText#1{#1} -\def\FV@ListProcessLine@NoBreak#1{% - \hbox to \hsize{% - \kern\leftmargin - \hbox to \linewidth{% - \FV@LeftListNumber - \FV@LeftListFrame - \FV@BGColor@List{% - \FancyVerbFormatLine{% - \FancyVerbHighlightLine{% - \FV@ObeyTabs{\FancyVerbFormatText{#1}}}}}\hss - \FV@RightListFrame - \FV@RightListNumber}% - \hss}} -\def\FV@BProcessLine#1{% - \hbox{\FancyVerbFormatLine{% - \ifx\FancyVerbBackgroundColor\relax - \else - \expandafter\FancyVerbBackgroundColorVPhantom - \fi - \FancyVerbHighlightLine{% - \FV@ObeyTabs{\FancyVerbFormatText{#1}}}}}} -\newbool{FV@NumberFirstLine} -\define@booleankey{FV}{numberfirstline}% - {\booltrue{FV@NumberFirstLine}}% - {\boolfalse{FV@NumberFirstLine}} -\fvset{numberfirstline=false} -\newbool{FV@StepNumberFromFirst} -\define@booleankey{FV}{stepnumberfromfirst}% - {\booltrue{FV@StepNumberFromFirst}}% - {\boolfalse{FV@StepNumberFromFirst}} -\fvset{stepnumberfromfirst=false} -\newbool{FV@StepNumberOffsetValues} -\define@booleankey{FV}{stepnumberoffsetvalues}% - {\booltrue{FV@StepNumberOffsetValues}}% - {\boolfalse{FV@StepNumberOffsetValues}} -\fvset{stepnumberoffsetvalues=false} -\def\FV@Numbers@left{% - \let\FV@RightListNumber\relax - \def\FV@LeftListNumber{% - \ifx\FancyVerbStartNum\z@ - \let\FancyVerbStartNum\@ne - \fi - \ifbool{FV@StepNumberFromFirst}% - {\@tempcnta=\FV@CodeLineNo - \@tempcntb=\FancyVerbStartNum - \advance\@tempcntb\FV@StepNumber - \divide\@tempcntb\FV@StepNumber - \multiply\@tempcntb\FV@StepNumber - \advance\@tempcnta\@tempcntb - \advance\@tempcnta-\FancyVerbStartNum - \@tempcntb=\@tempcnta}% - {\ifbool{FV@StepNumberOffsetValues}% - {\@tempcnta=\FV@CodeLineNo - \@tempcntb=\FV@CodeLineNo}% - {\@tempcnta=\c@FancyVerbLine - \@tempcntb=\c@FancyVerbLine}}% - \divide\@tempcntb\FV@StepNumber - \multiply\@tempcntb\FV@StepNumber - \ifnum\@tempcnta=\@tempcntb - \if@FV@NumberBlankLines - \hbox to\z@{\hss\theFancyVerbLine\kern\FV@NumberSep}% - \else - \ifx\FV@Line\empty - \else - \hbox to\z@{\hss\theFancyVerbLine\kern\FV@NumberSep}% - \fi - \fi - \else - \ifbool{FV@NumberFirstLine}{% - \ifnum\FV@CodeLineNo=\FancyVerbStartNum - \hbox to\z@{\hss\theFancyVerbLine\kern\FV@NumberSep}% - \fi}{}% - \fi}% -} -\def\FV@Numbers@right{% - \let\FV@LeftListNumber\relax - \def\FV@RightListNumber{% - \ifx\FancyVerbStartNum\z@ - \let\FancyVerbStartNum\@ne - \fi - \ifbool{FV@StepNumberFromFirst}% - {\@tempcnta=\FV@CodeLineNo - \@tempcntb=\FancyVerbStartNum - \advance\@tempcntb\FV@StepNumber - \divide\@tempcntb\FV@StepNumber - \multiply\@tempcntb\FV@StepNumber - \advance\@tempcnta\@tempcntb - \advance\@tempcnta-\FancyVerbStartNum - \@tempcntb=\@tempcnta}% - {\ifbool{FV@StepNumberOffsetValues}% - {\@tempcnta=\FV@CodeLineNo - \@tempcntb=\FV@CodeLineNo}% - {\@tempcnta=\c@FancyVerbLine - \@tempcntb=\c@FancyVerbLine}}% - \divide\@tempcntb\FV@StepNumber - \multiply\@tempcntb\FV@StepNumber - \ifnum\@tempcnta=\@tempcntb - \if@FV@NumberBlankLines - \hbox to\z@{\kern\FV@NumberSep\theFancyVerbLine\hss}% - \else - \ifx\FV@Line\empty - \else - \hbox to\z@{\kern\FV@NumberSep\theFancyVerbLine\hss}% - \fi - \fi - \else - \ifbool{FV@NumberFirstLine}{% - \ifnum\FV@CodeLineNo=\FancyVerbStartNum - \hbox to\z@{\hss\theFancyVerbLine\kern\FV@NumberSep}% - \fi}{}% - \fi}% -} -\def\FV@Numbers@both{% - \def\FV@LeftListNumber{% - \ifx\FancyVerbStartNum\z@ - \let\FancyVerbStartNum\@ne - \fi - \ifbool{FV@StepNumberFromFirst}% - {\@tempcnta=\FV@CodeLineNo - \@tempcntb=\FancyVerbStartNum - \advance\@tempcntb\FV@StepNumber - \divide\@tempcntb\FV@StepNumber - \multiply\@tempcntb\FV@StepNumber - \advance\@tempcnta\@tempcntb - \advance\@tempcnta-\FancyVerbStartNum - \@tempcntb=\@tempcnta}% - {\ifbool{FV@StepNumberOffsetValues}% - {\@tempcnta=\FV@CodeLineNo - \@tempcntb=\FV@CodeLineNo}% - {\@tempcnta=\c@FancyVerbLine - \@tempcntb=\c@FancyVerbLine}}% - \divide\@tempcntb\FV@StepNumber - \multiply\@tempcntb\FV@StepNumber - \ifnum\@tempcnta=\@tempcntb - \if@FV@NumberBlankLines - \hbox to\z@{\hss\theFancyVerbLine\kern\FV@NumberSep}% - \else - \ifx\FV@Line\empty - \else - \hbox to\z@{\hss\theFancyVerbLine\kern\FV@NumberSep}% - \fi - \fi - \else - \ifbool{FV@NumberFirstLine}{% - \ifnum\FV@CodeLineNo=\FancyVerbStartNum - \hbox to\z@{\hss\theFancyVerbLine\kern\FV@NumberSep}% - \fi}{}% - \fi}% - \def\FV@RightListNumber{% - \ifx\FancyVerbStartNum\z@ - \let\FancyVerbStartNum\@ne - \fi - \ifbool{FV@StepNumberFromFirst}% - {\@tempcnta=\FV@CodeLineNo - \@tempcntb=\FancyVerbStartNum - \advance\@tempcntb\FV@StepNumber - \divide\@tempcntb\FV@StepNumber - \multiply\@tempcntb\FV@StepNumber - \advance\@tempcnta\@tempcntb - \advance\@tempcnta-\FancyVerbStartNum - \@tempcntb=\@tempcnta}% - {\ifbool{FV@StepNumberOffsetValues}% - {\@tempcnta=\FV@CodeLineNo - \@tempcntb=\FV@CodeLineNo}% - {\@tempcnta=\c@FancyVerbLine - \@tempcntb=\c@FancyVerbLine}}% - \divide\@tempcntb\FV@StepNumber - \multiply\@tempcntb\FV@StepNumber - \ifnum\@tempcnta=\@tempcntb - \if@FV@NumberBlankLines - \hbox to\z@{\kern\FV@NumberSep\theFancyVerbLine\hss}% - \else - \ifx\FV@Line\empty - \else - \hbox to\z@{\kern\FV@NumberSep\theFancyVerbLine\hss}% - \fi - \fi - \else - \ifbool{FV@NumberFirstLine}{% - \ifnum\FV@CodeLineNo=\FancyVerbStartNum - \hbox to\z@{\hss\theFancyVerbLine\kern\FV@NumberSep}% - \fi}{}% - \fi}% -} -\define@key{FV}{backgroundcolor}{% - \def\FancyVerbBackgroundColor{#1}% - \ifx\FancyVerbBackgroundColor\FV@None - \let\FancyVerbBackgroundColor\relax - \else\ifx\FancyVerbBackgroundColor\@empty - \let\FancyVerbBackgroundColor\relax - \fi\fi}% -\fvset{backgroundcolor=none} -\define@key{FV}{bgcolor}{% - \fvset{backgroundcolor=#1}} -\define@key{FV}{backgroundcolorvphantom}{% - \def\FancyVerbBackgroundColorVPhantom{#1}% - \ifx\FancyVerbBackgroundColorVPhantom\FV@None - \let\FancyVerbBackgroundColorVPhantom\relax - \else\ifx\FancyVerbBackgroundColorVPhantom\@empty - \let\FancyVerbBackgroundColorVPhantom\relax - \fi\fi} -\fvset{backgroundcolorvphantom=\vphantom{\"Apgjy}} -\define@key{FV}{bgcolorvphantom}{% - \fvset{backgroundcolorvphantom=#1}} -\let\FancyVerbBackgroundColorPadding\relax -\def\FV@backgroundcolorpadding@none@framenotsingle{% - \fvset{frame=none,framerule,rulecolor=none}} -\def\FV@backgroundcolorpadding@dim@framenotsingle{% - \fvset{frame=single,framerule=0pt,rulecolor=\FancyVerbBackgroundColor}} -\define@key{FV}{backgroundcolorpadding}{% - \def\FancyVerbBackgroundColorPadding{#1}% - \ifx\FancyVerbBackgroundColorPadding\FV@None - \let\FancyVerbBackgroundColorPadding\relax - \else\ifx\FancyVerbBackgroundColorPadding\@empty - \let\FancyVerbBackgroundColorPadding\relax - \fi\fi - \let\FV@Next\relax - \ifx\FancyVerbBackgroundColorPadding\relax - \ifx\FV@BeginListFrame\FV@BeginListFrame@Single - \else - \let\FV@Next\FV@backgroundcolorpadding@none@framenotsingle - \fi - \ifx\FV@LeftListFrame\FV@LeftListFrame@Single - \else - \let\FV@Next\FV@backgroundcolorpadding@none@framenotsingle - \fi - \ifx\FV@RightListFrame\FV@RightListFrame@Single - \else - \let\FV@Next\FV@backgroundcolorpadding@none@framenotsingle - \fi - \ifx\FV@EndListFrame\FV@EndListFrame@Single - \else - \let\FV@Next\FV@backgroundcolorpadding@none@framenotsingle - \fi - \FV@Next - \fvset{framesep,fillcolor=none}% - \else - \ifx\FV@BeginListFrame\FV@BeginListFrame@Single - \else - \let\FV@Next\FV@backgroundcolorpadding@dim@framenotsingle - \fi - \ifx\FV@LeftListFrame\FV@LeftListFrame@Single - \else - \let\FV@Next\FV@backgroundcolorpadding@dim@framenotsingle - \fi - \ifx\FV@RightListFrame\FV@RightListFrame@Single - \else - \let\FV@Next\FV@backgroundcolorpadding@dim@framenotsingle - \fi - \ifx\FV@EndListFrame\FV@EndListFrame@Single - \else - \let\FV@Next\FV@backgroundcolorpadding@dim@framenotsingle - \fi - \FV@Next - \fvset{framesep=#1,fillcolor=\FancyVerbBackgroundColor}% - \fi} -\define@key{FV}{bgcolorpadding}{\fvset{backgroundcolorpadding=#1}} -\def\FV@BGColor@List#1{% - \ifx\FancyVerbBackgroundColor\relax - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {#1}% - {\setlength{\FV@TmpLength}{\fboxsep}% - \setlength{\fboxsep}{0pt}% - \colorbox{\FancyVerbBackgroundColor}{% - \setlength{\fboxsep}{\FV@TmpLength}% - \rlap{\FancyVerbBackgroundColorVPhantom\strut#1}% - \hspace{\linewidth}% - \ifx\FV@RightListFrame\relax\else - \hspace{-\FV@FrameSep}% - \hspace{-\FV@FrameRule}% - \fi - \ifx\FV@LeftListFrame\relax\else - \hspace{-\FV@FrameSep}% - \hspace{-\FV@FrameRule}% - \fi}% - \hss}} -\let\FV@BVerbatimBegin@NoBGColor\FV@BVerbatimBegin -\let\FV@BVerbatimEnd@NoBGColor\FV@BVerbatimEnd -\def\FV@BVerbatimBegin{% - \begingroup - \FV@UseKeyValues - \FV@FormattingPrep - \let\FV@FormattingPrep\relax - \FV@ObeyTabsInit - \let\FV@ObeyTabsInit\relax - \ifx\FancyVerbBackgroundColor\relax - \expandafter\FV@BVerbatimBegin@NoBGColor - \else - \expandafter\FV@BVerbatimBegin@BGColor - \fi} -\def\FV@BVerbatimEnd{% - \ifx\FancyVerbBackgroundColor\relax - \expandafter\FV@BVerbatimEnd@NoBGColor - \else - \expandafter\FV@BVerbatimEnd@BGColor - \fi - \endgroup} -\def\FV@BVerbatimBegin@BGColor{% - \gdef\FV@TheVerbatim{}% - \ifx\FV@boxwidth\relax - \gdef\FV@boxwidth@tmp{0pt}% - \def\FV@ProcessLine##1{% - \sbox{\FV@LineBox}{\FV@BProcessLine{##1}}% - \ifdim\wd\FV@LineBox>\FV@boxwidth@tmp\relax - \xdef\FV@boxwidth@tmp{\the\wd\FV@LineBox}% - \fi - \expandafter\gdef\expandafter\FV@TheVerbatim\expandafter{% - \FV@TheVerbatim\FV@ProcessLine{##1}}}% - \else - \def\FV@ProcessLine##1{% - \expandafter\gdef\expandafter\FV@TheVerbatim\expandafter{% - \FV@TheVerbatim\FV@ProcessLine{##1}}}% - \fi} -\def\FV@BVerbatimEnd@BGColor{% - \ifx\FV@boxwidth\relax - \let\FV@boxwidth\FV@boxwidth@tmp - \global\let\FV@boxwidth@tmp\FV@Undefined - \fi - \setlength{\FV@TmpLength}{\fboxsep}% - \ifx\FancyVerbBackgroundColorPadding\relax - \setlength{\fboxsep}{0pt}% - \else - \setlength{\fboxsep}{\FancyVerbBackgroundColorPadding}% - \fi - \colorbox{\FancyVerbBackgroundColor}{% - \setlength{\fboxsep}{\FV@TmpLength}% - \FV@BVerbatimBegin@NoBGColor\FV@TheVerbatim\FV@BVerbatimEnd@NoBGColor}% - \gdef\FV@TheVerbatim{}} -\define@key{FV}{highlightlines}{\def\FV@HighlightLinesList{#1}}% -\fvset{highlightlines=} -\define@key{FV}{highlightcolor}{\def\FancyVerbHighlightColor{#1}}% -\let\FancyVerbHighlightColor\@empty -\ifcsname definecolor\endcsname -\ifx\definecolor\relax -\else - \definecolor{FancyVerbHighlightColor}{rgb}{0.878, 1, 1} - \fvset{highlightcolor=FancyVerbHighlightColor} -\fi\fi -\AtBeginDocument{% - \ifx\FancyVerbHighlightColor\@empty - \ifcsname definecolor\endcsname - \ifx\definecolor\relax - \else - \definecolor{FancyVerbHighlightColor}{rgb}{0.878, 1, 1} - \fvset{highlightcolor=FancyVerbHighlightColor} - \fi\fi - \fi} -\def\FancyVerbHighlightLine#1{#1} -\def\FV@HighlightLine#1{% - \@tempcnta=\c@FancyVerbLine - \@tempcntb=\c@FancyVerbLine - \ifcsname FV@HighlightLine:\number\@tempcnta\endcsname - \advance\@tempcntb\m@ne - \ifcsname FV@HighlightLine:\number\@tempcntb\endcsname - \advance\@tempcntb\tw@ - \ifcsname FV@HighlightLine:\number\@tempcntb\endcsname - \let\FV@HighlightLine@Next\FancyVerbHighlightLineMiddle - \else - \let\FV@HighlightLine@Next\FancyVerbHighlightLineLast - \fi - \else - \advance\@tempcntb\tw@ - \ifcsname FV@HighlightLine:\number\@tempcntb\endcsname - \let\FV@HighlightLine@Next\FancyVerbHighlightLineFirst - \else - \let\FV@HighlightLine@Next\FancyVerbHighlightLineSingle - \fi - \fi - \else - \let\FV@HighlightLine@Next\FancyVerbHighlightLineNormal - \fi - \FV@HighlightLine@Next{#1}% -} -\def\FancyVerbHighlightLineNormal#1{#1} -\newlength{\FV@TmpLength} -\def\FancyVerbHighlightLineFirst#1{% - \setlength{\FV@TmpLength}{\fboxsep}% - \setlength{\fboxsep}{0pt}% - \colorbox{\FancyVerbHighlightColor}{% - \setlength{\fboxsep}{\FV@TmpLength}% - \rlap{\strut#1}% - \hspace{\linewidth}% - \ifx\FV@RightListFrame\relax\else - \hspace{-\FV@FrameSep}% - \hspace{-\FV@FrameRule}% - \fi - \ifx\FV@LeftListFrame\relax\else - \hspace{-\FV@FrameSep}% - \hspace{-\FV@FrameRule}% - \fi - }% - \hss -} -\let\FancyVerbHighlightLineMiddle\FancyVerbHighlightLineFirst -\let\FancyVerbHighlightLineLast\FancyVerbHighlightLineFirst -\let\FancyVerbHighlightLineSingle\FancyVerbHighlightLineFirst -\def\FV@HighlightLinesPrep{% - \ifx\FV@HighlightLinesList\@empty - \else - \let\FancyVerbHighlightLine\FV@HighlightLine - \expandafter\FV@HighlightLinesPrep@i - \fi} -\def\FV@HighlightLinesPrep@i{% - \renewcommand{\do}[1]{% - \ifstrempty{##1}{}{\FV@HighlightLinesParse##1-\FV@Undefined}}% - \expandafter\docsvlist\expandafter{\FV@HighlightLinesList}} -\def\FV@HighlightLinesParse#1-#2\FV@Undefined{% - \ifstrempty{#2}% - {\FV@HighlightLinesParse@Single{#1}}% - {\FV@HighlightLinesParse@Range{#1}#2\relax}} -\def\FV@HighlightLinesParse@Single#1{% - \expandafter\let\csname FV@HighlightLine:\detokenize{#1}\endcsname\relax} -\newcounter{FV@HighlightLinesStart} -\newcounter{FV@HighlightLinesStop} -\def\FV@HighlightLinesParse@Range#1#2-{% - \setcounter{FV@HighlightLinesStart}{#1}% - \setcounter{FV@HighlightLinesStop}{#2}% - \stepcounter{FV@HighlightLinesStop}% - \FV@HighlightLinesParse@Range@Loop} -\def\FV@HighlightLinesParse@Range@Loop{% - \ifnum\value{FV@HighlightLinesStart}<\value{FV@HighlightLinesStop}\relax - \expandafter\let\csname FV@HighlightLine:\arabic{FV@HighlightLinesStart}\endcsname\relax - \stepcounter{FV@HighlightLinesStart}% - \expandafter\FV@HighlightLinesParse@Range@Loop - \fi} -\g@addto@macro\FV@FormattingPrep@PreHook{\FV@HighlightLinesPrep} -\def\FV@StepLineNo@Patch@HighlightLine{% - \ifcsname FV@HighlightLine:\number\c@FancyVerbLine\endcsname - \@tempcnta=\c@FancyVerbLine - \advance\@tempcnta\@ne - \ifcsname FV@HighlightLine:\number\@tempcnta\endcsname - \else - \expandafter\let - \csname FV@HighlightLine:\number\c@FancyVerbLine\endcsname\FV@Undefined - \fi - \fi} -\patchcmd{\FV@StepLineNo}% - {\ifx\FV@Line\empty}% - {\ifx\FV@Line\empty\FV@StepLineNo@Patch@HighlightLine}% - {}% - {\PackageError{fvextra}% - {Failed to patch \string\FV@StepLineNo\ to make highlightlines - compatible with numberblanklines}% - {Failed to patch \string\FV@StepLineNo\ to make highlightlines - compatible with numberblanklines}} -\newcount\FV@LoopCount -\newbox\FV@NCharsBox -\def\FV@SetToWidthNChars#1#2{% - \FV@LoopCount=#2\relax - \ifnum\FV@LoopCount>0 - \def\FV@NChars{}% - \loop - \ifnum\FV@LoopCount>0 - \expandafter\def\expandafter\FV@NChars\expandafter{\FV@NChars x}% - \fi - \advance\FV@LoopCount by -1 - \ifnum\FV@LoopCount>0 - \repeat - \setbox\FV@NCharsBox\hbox{\FV@NChars}% - #1=\wd\FV@NCharsBox - \else - #1=0pt\relax - \fi -} -\newbool{FV@breaklines} -\define@booleankey{FV}{breaklines}% - {\booltrue{FV@breaklines}% - \let\FV@ListProcessLine\FV@ListProcessLine@Break}% - {\boolfalse{FV@breaklines}% - \let\FV@ListProcessLine\FV@ListProcessLine@NoBreak} -\AtEndOfPackage{\fvset{breaklines=false}} -\def\FV@BreakLinesLuaTeXHook{% - \expandafter\def\expandafter\@noligs\expandafter{\@noligs - \begingroup\lccode`\~=`\-\lowercase{\endgroup\def~}{\leavevmode\kern\z@\mbox{-}}}} -\ifcsname directlua\endcsname - \ifx\directlua\relax - \else - \FV@AddToHook\FV@FormattingPrep@PreHook\FV@BreakLinesLuaTeXHook - \fi -\fi -\def\FV@BreakLinesIndentationHook{} -\g@addto@macro\FV@FormattingPrep@PostHook{% - \ifFV@breaklines - \FV@BreakLinesIndentationHook - \fi} -\newdimen\FV@BreakIndent -\newcount\FV@BreakIndentNChars -\define@key{FV}{breakindent}{% - \FV@BreakIndent=#1\relax - \FV@BreakIndentNChars=0\relax} -\define@key{FV}{breakindentnchars}{\FV@BreakIndentNChars=#1\relax} -\g@addto@macro\FV@BreakLinesIndentationHook{% - \ifnum\FV@BreakIndentNChars>0 - \FV@SetToWidthNChars{\FV@BreakIndent}{\FV@BreakIndentNChars}% - \fi} -\fvset{breakindentnchars=0} -\newbool{FV@breakautoindent} -\define@booleankey{FV}{breakautoindent}% - {\booltrue{FV@breakautoindent}}{\boolfalse{FV@breakautoindent}} -\fvset{breakautoindent=true} -\define@key{FV}{breaksymbolleft}{\def\FancyVerbBreakSymbolLeft{#1}} -\define@key{FV}{breaksymbol}{\fvset{breaksymbolleft=#1}} -\fvset{breaksymbolleft=\tiny\ensuremath{\hookrightarrow}} -\define@key{FV}{breaksymbolright}{\def\FancyVerbBreakSymbolRight{#1}} -\fvset{breaksymbolright={}} -\newdimen\FV@BreakSymbolSepLeft -\newcount\FV@BreakSymbolSepLeftNChars -\define@key{FV}{breaksymbolsepleft}{% - \FV@BreakSymbolSepLeft=#1\relax - \FV@BreakSymbolSepLeftNChars=0\relax} -\define@key{FV}{breaksymbolsep}{\fvset{breaksymbolsepleft=#1}} -\define@key{FV}{breaksymbolsepleftnchars}{\FV@BreakSymbolSepLeftNChars=#1\relax} -\define@key{FV}{breaksymbolsepnchars}{\fvset{breaksymbolsepleftnchars=#1}} -\g@addto@macro\FV@BreakLinesIndentationHook{% - \ifnum\FV@BreakSymbolSepLeftNChars>0 - \FV@SetToWidthNChars{\FV@BreakSymbolSepLeft}{\FV@BreakSymbolSepLeftNChars}% - \fi} -\fvset{breaksymbolsepleftnchars=2} -\newdimen\FV@BreakSymbolSepRight -\newcount\FV@BreakSymbolSepRightNChars -\define@key{FV}{breaksymbolsepright}{% - \FV@BreakSymbolSepRight=#1\relax - \FV@BreakSymbolSepRightNChars=0\relax} -\define@key{FV}{breaksymbolseprightnchars}{\FV@BreakSymbolSepRightNChars=#1\relax} -\g@addto@macro\FV@BreakLinesIndentationHook{% - \ifnum\FV@BreakSymbolSepRightNChars>0 - \FV@SetToWidthNChars{\FV@BreakSymbolSepRight}{\FV@BreakSymbolSepRightNChars}% - \fi} -\fvset{breaksymbolseprightnchars=2} -\newdimen\FV@BreakSymbolIndentLeft -\newcount\FV@BreakSymbolIndentLeftNChars -\define@key{FV}{breaksymbolindentleft}{% - \FV@BreakSymbolIndentLeft=#1\relax - \FV@BreakSymbolIndentLeftNChars=0\relax} -\define@key{FV}{breaksymbolindent}{\fvset{breaksymbolindentleft=#1}} -\define@key{FV}{breaksymbolindentleftnchars}{\FV@BreakSymbolIndentLeftNChars=#1\relax} -\define@key{FV}{breaksymbolindentnchars}{\fvset{breaksymbolindentleftnchars=#1}} -\g@addto@macro\FV@BreakLinesIndentationHook{% - \ifnum\FV@BreakSymbolIndentLeftNChars>0 - \FV@SetToWidthNChars{\FV@BreakSymbolIndentLeft}{\FV@BreakSymbolIndentLeftNChars}% - \fi} -\fvset{breaksymbolindentleftnchars=4} -\newdimen\FV@BreakSymbolIndentRight -\newcount\FV@BreakSymbolIndentRightNChars -\define@key{FV}{breaksymbolindentright}{% - \FV@BreakSymbolIndentRight=#1\relax - \FV@BreakSymbolIndentRightNChars=0\relax} -\define@key{FV}{breaksymbolindentrightnchars}{\FV@BreakSymbolIndentRightNChars=#1\relax} -\g@addto@macro\FV@BreakLinesIndentationHook{% - \ifnum\FV@BreakSymbolIndentRightNChars>0 - \FV@SetToWidthNChars{\FV@BreakSymbolIndentRight}{\FV@BreakSymbolIndentRightNChars}% - \fi} -\fvset{breaksymbolindentrightnchars=4} -\newcommand{\FancyVerbBreakSymbolLeftLogic}[1]{% - \ifnum\value{linenumber}=1\relax\else{#1}\fi} -\newcounter{FancyVerbLineBreakLast} -\newcommand{\FV@SetLineBreakLast}{% - \setcounter{FancyVerbLineBreakLast}{\value{linenumber}}} -\newcommand{\FancyVerbBreakSymbolRightLogic}[1]{% - \ifnum\value{linenumber}=\value{FancyVerbLineBreakLast}\relax\else{#1}\fi} -\let\FancyVerbBreakStart\relax -\let\FancyVerbBreakStop\relax -\let\FV@Break@DefaultToken\FV@Break@NBToken -\newbool{FV@breakanywhere} -\define@booleankey{FV}{breakanywhere}% - {\booltrue{FV@breakanywhere}% - \let\FancyVerbBreakStart\FV@Break - \let\FancyVerbBreakStop\FV@EndBreak - \let\FV@Break@DefaultToken\FV@Break@AnyToken}% - {\boolfalse{FV@breakanywhere}% - \let\FancyVerbBreakStart\relax - \let\FancyVerbBreakStop\relax - \let\FV@Break@DefaultToken\FV@Break@NBToken} -\fvset{breakanywhere=false} -\define@key{FV}{breakanywhereinlinestretch}{% - \def\FV@breakanywhereinlinestretch{#1}% - \ifx\FV@breakanywhereinlinestretch\FV@None - \let\FV@breakanywhereinlinestretch\relax - \else\ifx\FV@breakanywhereinlinestretch\@empty - \let\FV@breakanywhereinlinestretch\relax - \fi\fi} -\fvset{breakanywhereinlinestretch=none} -\def\FV@ApplyBreakAnywhereInlineStretch{% - \ifx\FV@breakanywhereinlinestretch\relax - \else - \let\FancyVerbBreakAnywhereBreak@Orig\FancyVerbBreakAnywhereBreak - \def\FancyVerbBreakAnywhereBreak{% - \nobreak\hspace{0pt plus \FV@breakanywhereinlinestretch}% - \FancyVerbBreakAnywhereBreak@Orig}% - \fi} -\define@key{FV}{breakbefore}{% - \ifstrempty{#1}% - {\let\FV@BreakBefore\@empty - \let\FancyVerbBreakStart\relax - \let\FancyVerbBreakStop\relax - \let\FV@Break@DefaultToken\FV@Break@NBToken}% - {\def\FV@BreakBefore{#1}% - \let\FancyVerbBreakStart\FV@Break - \let\FancyVerbBreakStop\FV@EndBreak - \let\FV@Break@DefaultToken\FV@Break@BeforeAfterToken}% -} -\fvset{breakbefore={}} -\newbool{FV@breakbeforeinrun} -\define@booleankey{FV}{breakbeforeinrun}% - {\booltrue{FV@breakbeforeinrun}}% - {\boolfalse{FV@breakbeforeinrun}}% -\fvset{breakbeforeinrun=false} -\def\FV@BreakBeforePrep{% - \ifx\FV@BreakBefore\@empty\relax - \else - \gdef\FV@BreakBefore@Def{}% - \begingroup - \def\FV@BreakBefore@Process##1##2\FV@Undefined{% - \expandafter\FV@BreakBefore@Process@i\expandafter{##1}% - \expandafter\ifx\expandafter\relax\detokenize{##2}\relax - \else - \FV@BreakBefore@Process##2\FV@Undefined - \fi - }% - \def\FV@BreakBefore@Process@i##1{% - \g@addto@macro\FV@BreakBefore@Def{% - \@namedef{FV@BreakBefore@Token\detokenize{##1}}{}}% - }% - \FV@EscChars - \expandafter\FV@BreakBefore@Process\FV@BreakBefore\FV@Undefined - \endgroup - \FV@BreakBefore@Def - \FV@BreakBeforePrep@PygmentsHook - \fi -} -\let\FV@BreakBeforePrep@PygmentsHook\relax -\define@key{FV}{breakafter}{% - \ifstrempty{#1}% - {\let\FV@BreakAfter\@empty - \let\FancyVerbBreakStart\relax - \let\FancyVerbBreakStop\relax - \let\FV@Break@DefaultToken\FV@Break@NBToken}% - {\def\FV@BreakAfter{#1}% - \let\FancyVerbBreakStart\FV@Break - \let\FancyVerbBreakStop\FV@EndBreak - \let\FV@Break@DefaultToken\FV@Break@BeforeAfterToken}% -} -\fvset{breakafter={}} -\newbool{FV@breakafterinrun} -\define@booleankey{FV}{breakafterinrun}% - {\booltrue{FV@breakafterinrun}}% - {\boolfalse{FV@breakafterinrun}}% -\fvset{breakafterinrun=false} -\def\FV@BreakAfterPrep{% - \ifx\FV@BreakAfter\@empty\relax - \else - \gdef\FV@BreakAfter@Def{}% - \begingroup - \def\FV@BreakAfter@Process##1##2\FV@Undefined{% - \expandafter\FV@BreakAfter@Process@i\expandafter{##1}% - \expandafter\ifx\expandafter\relax\detokenize{##2}\relax - \else - \FV@BreakAfter@Process##2\FV@Undefined - \fi - }% - \def\FV@BreakAfter@Process@i##1{% - \ifcsname FV@BreakBefore@Token\detokenize{##1}\endcsname - \ifbool{FV@breakbeforeinrun}% - {\ifbool{FV@breakafterinrun}% - {}% - {\PackageError{fvextra}% - {Conflicting breakbeforeinrun and breakafterinrun for "\detokenize{##1}"}% - {Conflicting breakbeforeinrun and breakafterinrun for "\detokenize{##1}"}}}% - {\ifbool{FV@breakafterinrun}% - {\PackageError{fvextra}% - {Conflicting breakbeforeinrun and breakafterinrun for "\detokenize{##1}"}% - {Conflicting breakbeforeinrun and breakafterinrun for "\detokenize{##1}"}}% - {}}% - \fi - \g@addto@macro\FV@BreakAfter@Def{% - \@namedef{FV@BreakAfter@Token\detokenize{##1}}{}}% - }% - \FV@EscChars - \expandafter\FV@BreakAfter@Process\FV@BreakAfter\FV@Undefined - \endgroup - \FV@BreakAfter@Def - \FV@BreakAfterPrep@PygmentsHook - \fi -} -\let\FV@BreakAfterPrep@PygmentsHook\relax -\g@addto@macro\FV@FormattingPrep@PreHook{% - \ifFV@pdfTeXinputenc - \ifdefstring{\inputencodingname}{utf8}% - {\let\FV@BreakBeforePrep\FV@BreakBeforePrep@UTF - \let\FV@BreakAfterPrep\FV@BreakAfterPrep@UTF}% - {}% - \fi - \FV@BreakBeforePrep\FV@BreakAfterPrep} -\define@key{FV}{breakanywheresymbolpre}{% - \ifstrempty{#1}% - {\def\FancyVerbBreakAnywhereSymbolPre{}}% - {\def\FancyVerbBreakAnywhereSymbolPre{\hbox{#1}}}} -\fvset{breakanywheresymbolpre={\,\footnotesize\ensuremath{_\rfloor}}} -\define@key{FV}{breakanywheresymbolpost}{% - \ifstrempty{#1}% - {\def\FancyVerbBreakAnywhereSymbolPost{}}% - {\def\FancyVerbBreakAnywhereSymbolPost{\hbox{#1}}}} -\fvset{breakanywheresymbolpost={}} -\define@key{FV}{breakbeforesymbolpre}{% - \ifstrempty{#1}% - {\def\FancyVerbBreakBeforeSymbolPre{}}% - {\def\FancyVerbBreakBeforeSymbolPre{\hbox{#1}}}} -\fvset{breakbeforesymbolpre={\,\footnotesize\ensuremath{_\rfloor}}} -\define@key{FV}{breakbeforesymbolpost}{% - \ifstrempty{#1}% - {\def\FancyVerbBreakBeforeSymbolPost{}}% - {\def\FancyVerbBreakBeforeSymbolPost{\hbox{#1}}}} -\fvset{breakbeforesymbolpost={}} -\define@key{FV}{breakaftersymbolpre}{% - \ifstrempty{#1}% - {\def\FancyVerbBreakAfterSymbolPre{}}% - {\def\FancyVerbBreakAfterSymbolPre{\hbox{#1}}}} -\fvset{breakaftersymbolpre={\,\footnotesize\ensuremath{_\rfloor}}} -\define@key{FV}{breakaftersymbolpost}{% - \ifstrempty{#1}% - {\def\FancyVerbBreakAfterSymbolPost{}}% - {\def\FancyVerbBreakAfterSymbolPost{\hbox{#1}}}} -\fvset{breakaftersymbolpost={}} -\newcommand{\FancyVerbBreakAnywhereBreak}{% - \discretionary{\FancyVerbBreakAnywhereSymbolPre}% - {\FancyVerbBreakAnywhereSymbolPost}{}} -\newcommand{\FancyVerbBreakBeforeBreak}{% - \discretionary{\FancyVerbBreakBeforeSymbolPre}% - {\FancyVerbBreakBeforeSymbolPost}{}} -\newcommand{\FancyVerbBreakAfterBreak}{% - \discretionary{\FancyVerbBreakAfterSymbolPre}% - {\FancyVerbBreakAfterSymbolPost}{}} -\newbool{FV@breaknonspaceingroup} -\define@booleankey{FV}{breaknonspaceingroup}% - {\booltrue{FV@breaknonspaceingroup}}% - {\boolfalse{FV@breaknonspaceingroup}} -\fvset{breaknonspaceingroup=false} -\newbool{FV@breakpreferspaces} -\booltrue{FV@breakpreferspaces} -\define@booleankey{FV}{breakpreferspaces}% - {\booltrue{FV@breakpreferspaces}}% - {\boolfalse{FV@breakpreferspaces}} -\def\FV@BreakHyphenation{% - \finalhyphendemerits=0\relax - \ifbool{FV@breakpreferspaces}{}{\linepenalty=\@M\relax}} -\g@addto@macro\FV@FormattingPrep@PreHook{\FV@BreakHyphenation} -\newsavebox{\FV@LineBox} -\newsavebox{\FV@LineIndentBox} -\let\FV@LineIndentChars\@empty -\def\FV@GetLineIndent{% - \@ifnextchar\FV@Sentinel - {\FV@GetLineIndent@End}% - {\ifx\@let@token\FV@FVSpaceToken - \let\FV@Next\FV@GetLineIndent@Whitespace - \else\ifx\@let@token\FV@FVTabToken - \let\FV@Next\FV@GetLineIndent@Whitespace - \else\ifcsname FV@PYG@Redefed\endcsname - \ifx\@let@token\FV@PYG@Redefed - \let\FV@Next\FV@GetLineIndent@Pygments - \else - \let\FV@Next\FV@GetLineIndent@End - \fi - \else - \let\FV@Next\FV@GetLineIndent@End - \fi\fi\fi - \FV@Next}} -\def\FV@GetLineIndent@End#1\FV@Sentinel{} -\def\FV@GetLineIndent@Whitespace#1{% - \expandafter\def\expandafter\FV@LineIndentChars\expandafter{\FV@LineIndentChars#1}% - \FV@GetLineIndent} -\def\FV@GetLineIndent@Pygments#1#2#3{% - \FV@GetLineIndent#3} -\def\FV@TrueTab@UseWidth{% - \@tempdima=\csname FV@TrueTab:Width\arabic{FV@TrueTabCounter}\endcsname sp\relax - \stepcounter{FV@TrueTabCounter}% - \hbox to\@tempdima{\hss\FV@TabChar}} -\newcounter{FV@BreakBufferDepth} -\def\FV@BreakBuffer@Append#1{% - \expandafter\def\expandafter\FV@BreakBuffer\expandafter{\FV@BreakBuffer#1}} -\def\FV@BreakBufferStart{% - \FV@BreakBufferStart@i} -\def\FV@BreakBufferStart@i#1{% - \ifnum\value{FV@BreakBufferDepth}>0\relax - \expandafter\let\csname FV@BreakBuffer\arabic{FV@BreakBufferDepth}\endcsname - \FV@BreakBuffer - \expandafter\let\csname FV@Break@Token\arabic{FV@BreakBufferDepth}\endcsname - \FV@Break@Token - \fi - \def\FV@BreakBuffer{}% - \let\FV@Break@Token=#1% - \stepcounter{FV@BreakBufferDepth}% - \let\FV@LastToken=\FV@Undefined - \FV@Break@Scan} -\newbool{FV@UserMacroBreaks} -\def\FV@BreakBufferStop{% - \FV@BreakBufferStop@i} -\def\FV@BreakBufferStop@i#1{% - \addtocounter{FV@BreakBufferDepth}{-1}% - \let\FV@LastToken=\FV@Undefined - \ifnum\value{FV@BreakBufferDepth}<0\relax - \PackageError{fvextra}% - {Line break insertion error (extra \string\FancyVerbBreakStop?)}% - {Line break insertion error (extra \string\FancyVerbBreakStop?)}% - \def\FV@BreakBuffer{}% - \fi - \ifnum\value{FV@BreakBufferDepth}>0\relax - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {\expandafter\FV@BreakBufferStop@ii\expandafter{\FV@BreakBuffer}{#1}}% - {\ifbool{FV@UserMacroBreaks}% - {\expandafter\let\expandafter\FV@BreakBuffer\expandafter\FV@Undefined\FV@BreakBuffer}% - {}}} -\def\FV@BreakBufferStop@ii#1#2{% - \ifstrempty{#2}% - {\FV@BreakBufferStop@iii{#1}}% - {\expandafter\FV@BreakBufferStop@iii\expandafter{#2{#1}}}} -\def\FV@BreakBufferStop@iii#1{% - \expandafter\let\expandafter\FV@BreakBufferUpLevel - \csname FV@BreakBuffer\arabic{FV@BreakBufferDepth}\endcsname - \expandafter\def\expandafter\FV@BreakBuffer\expandafter{\FV@BreakBufferUpLevel#1}% - \expandafter\let\expandafter\FV@Break@Token - \csname FV@Break@Token\arabic{FV@BreakBufferDepth}\endcsname - \FV@Break@Scan} -\def\FV@InsertBreaks#1#2{% - \ifx\FancyVerbBreakStart\relax - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {#1{#2}}% - {\ifFV@pdfTeXinputenc - \ifdefstring{\inputencodingname}{utf8}% - {\ifx\FV@Break@DefaultToken\FV@Break@AnyToken - \let\FV@Break@DefaultToken\FV@Break@AnyToken@UTF - \else - \ifx\FV@Break@DefaultToken\FV@Break@BeforeAfterToken - \let\FV@Break@DefaultToken\FV@Break@BeforeAfterToken@UTF - \fi - \fi}% - {}% - \fi - \setcounter{FV@BreakBufferDepth}{0}% - \boolfalse{FV@UserMacroBreaks}% - \FancyVerbBreakStart#2\FancyVerbBreakStop - \setcounter{FV@BreakBufferDepth}{0}% - \booltrue{FV@UserMacroBreaks}% - \expandafter\FV@InsertBreaks@i\expandafter{\FV@BreakBuffer}{#1}}} -\def\FV@InsertBreaks@i#1#2{% - \let\FV@BreakBuffer\FV@Undefined - #2{#1}} -\def\FV@Break{% - \FV@BreakBufferStart{\FV@Break@DefaultToken}} -\def\FV@EndBreak{% - \FV@BreakBufferStop{}} -\begingroup -\catcode`\$=3 -\gdef\FV@Break@Scan{% - \@ifnextchar\FancyVerbBreakStart% - {}% - {\ifx\@let@token\FancyVerbBreakStop - \let\FV@Break@Next\relax - \else\ifx\@let@token\FV@BreakBufferStart - \let\FV@Break@Next\relax - \else\ifx\@let@token\FV@BreakBufferStop - \let\FV@Break@Next\relax - \else\ifx\@let@token$ - \let\FV@Break@Next\FV@Break@Math - \else\ifx\@let@token\bgroup - \let\FV@Break@Next\FV@Break@Group - \else - \let\FV@Break@Next\FV@Break@Token - \fi\fi\fi\fi\fi - \FV@Break@Next}} -\endgroup -\begingroup -\catcode`\$=3% -\gdef\FV@Break@Math$#1${% - \FV@BreakBufferStart{\FV@Break@NBToken}#1\FV@BreakBufferStop{\FV@Break@MathTemplate}} -\gdef\FV@Break@MathTemplate#1{$#1$} -\endgroup -\def\FV@Break@Group#1{% - \ifstrempty{#1}% - {\FV@BreakBuffer@Append{{}}% - \FV@Break@Scan}% - {\ifbool{FV@breaknonspaceingroup}% - {\FV@BreakBufferStart{\FV@Break@DefaultToken}% - #1\FV@BreakBufferStop{\FV@Break@GroupTemplate}}% - {\FV@BreakBufferStart{\FV@Break@NBToken}% - #1\FV@BreakBufferStop{\FV@Break@GroupTemplate}}}} -\def\FV@Break@GroupTemplate#1{{#1}} -\def\FV@Break@NBToken#1{% - \FV@BreakBuffer@Append{#1}% - \let\FV@LastToken=\FV@Undefined - \FV@Break@Scan} -\def\FV@Break@AnyToken#1{% - \ifx\FV@FVSpaceToken#1\relax - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {\let\FV@LastToken=#1\FV@BreakBuffer@Append{#1}\FV@Break@Scan}% - {\ifx\FV@LastToken\FV@FVSpaceToken - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {\let\FV@LastToken=#1% - \FV@BreakBuffer@Append{#1}\FV@Break@Scan}% - {\let\FV@LastToken=#1% - \FV@BreakBuffer@Append{\FancyVerbBreakAnywhereBreak#1}\FV@Break@Scan}}} -\def\FV@Break@BeforeAfterToken#1{% - \ifcsname FV@BreakBefore@Token\detokenize{#1}\endcsname - \let\FV@Break@Next\FV@Break@BeforeTokenBreak - \else - \ifcsname FV@BreakAfter@Token\detokenize{#1}\endcsname - \let\FV@Break@Next\FV@Break@AfterTokenBreak - \else - \let\FV@Break@Next\FV@Break@BeforeAfterTokenNoBreak - \fi - \fi - \FV@Break@Next{#1}% -} -\def\FV@Break@BeforeAfterTokenNoBreak#1{% - \FV@BreakBuffer@Append{#1}% - \let\FV@LastToken=#1% - \FV@Break@Scan} -\def\FV@Break@BeforeTokenBreak#1{% - \ifbool{FV@breakbeforeinrun}% - {\ifcsname FV@BreakAfter@Token\detokenize{#1}\endcsname - \ifx#1\FV@FVSpaceToken - \FV@BreakBuffer@Append{\FancyVerbSpaceBreak}% - \else - \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak}% - \fi - \let\FV@Break@Next\FV@Break@BeforeTokenBreak@AfterRescan - \def\FV@RescanToken{#1}% - \else - \ifx#1\FV@FVSpaceToken - \FV@BreakBuffer@Append{\FancyVerbSpaceBreak#1}% - \else - \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak#1}% - \fi - \let\FV@Break@Next\FV@Break@Scan - \let\FV@LastToken=#1% - \fi}% - {\ifx#1\FV@LastToken\relax - \ifcsname FV@BreakAfter@Token\detokenize{#1}\endcsname - \let\FV@Break@Next\FV@Break@BeforeTokenBreak@AfterRescan - \def\FV@RescanToken{#1}% - \else - \FV@BreakBuffer@Append{#1}% - \let\FV@Break@Next\FV@Break@Scan - \let\FV@LastToken=#1% - \fi - \else - \ifcsname FV@BreakAfter@Token\detokenize{#1}\endcsname - \ifx#1\FV@FVSpaceToken - \FV@BreakBuffer@Append{\FancyVerbSpaceBreak}% - \else - \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak}% - \fi - \let\FV@Break@Next\FV@Break@BeforeTokenBreak@AfterRescan - \def\FV@RescanToken{#1}% - \else - \ifx#1\FV@FVSpaceToken - \FV@BreakBuffer@Append{\FancyVerbSpaceBreak#1}% - \else - \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak#1}% - \fi - \let\FV@Break@Next\FV@Break@Scan - \let\FV@LastToken=#1% - \fi - \fi}% - \FV@Break@Next} -\def\FV@Break@BeforeTokenBreak@AfterRescan{% - \expandafter\FV@Break@AfterTokenBreak\FV@RescanToken} -\def\FV@Break@AfterTokenBreak#1{% - \let\FV@LastToken=#1% - \@ifnextchar\FV@FVSpaceToken% - {\ifx#1\FV@FVSpaceToken - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {\FV@Break@AfterTokenBreak@i{#1}}% - {\FV@BreakBuffer@Append{#1}% - \FV@Break@Scan}}% - {\FV@Break@AfterTokenBreak@i{#1}}} -\def\FV@Break@AfterTokenBreak@i#1{% - \ifbool{FV@breakafterinrun}% - {\ifx#1\FV@FVSpaceToken - \FV@BreakBuffer@Append{#1\FancyVerbSpaceBreak}% - \else - \FV@BreakBuffer@Append{#1\FancyVerbBreakAfterBreak}% - \fi - \let\FV@Break@Next\FV@Break@Scan}% - {\ifx\@let@token#1\relax - \FV@BreakBuffer@Append{#1}% - \let\FV@Break@Next\FV@Break@Scan - \else - \expandafter\ifx\csname @let@token\endcsname\bgroup\relax - \FV@BreakBuffer@Append{#1}% - \let\FV@Break@Next\FV@Break@AfterTokenBreak@Group - \else - \ifx#1\FV@FVSpaceToken - \FV@BreakBuffer@Append{#1\FancyVerbSpaceBreak}% - \else - \FV@BreakBuffer@Append{#1\FancyVerbBreakAfterBreak}% - \fi - \let\FV@Break@Next\FV@Break@Scan - \fi - \fi}% - \FV@Break@Next -} -\def\FV@Break@AfterTokenBreak@Group#1{% - \ifstrempty{#1}% - {\FV@BreakBuffer@Append{{}}% - \@ifnextchar\FV@LastToken% - {\FV@Break@Scan}% - {\ifx\FV@LastToken\FV@FVSpaceToken - \FV@BreakBuffer@Append{\FancyVerbSpaceBreak}% - \else - \FV@BreakBuffer@Append{\FancyVerbBreakAfterBreak}% - \fi - \FV@Break@Scan}}% - {\ifx\FV@LastToken\FV@FVSpaceToken - \FV@BreakBuffer@Append{\FancyVerbSpaceBreak}% - \else - \FV@BreakBuffer@Append{\FancyVerbBreakAfterBreak}% - \fi - \FV@Break@Group{#1}}} -\ifFV@pdfTeXinputenc -\def\FV@BreakBeforePrep@UTF{% - \ifx\FV@BreakBefore\@empty\relax - \else - \gdef\FV@BreakBefore@Def{}% - \begingroup - \def\FV@BreakBefore@Process##1{% - \ifcsname FV@U8:\detokenize{##1}\endcsname - \expandafter\let\expandafter\FV@Break@Next\csname FV@U8:\detokenize{##1}\endcsname - \let\FV@UTF@octets@after\FV@BreakBefore@Process@ii - \else - \ifx##1\FV@Undefined - \let\FV@Break@Next\@gobble - \else - \let\FV@Break@Next\FV@BreakBefore@Process@i - \fi - \fi - \FV@Break@Next##1% - }% - \def\FV@BreakBefore@Process@i##1{% - \expandafter\FV@BreakBefore@Process@ii\expandafter{##1}}% - \def\FV@BreakBefore@Process@ii##1{% - \g@addto@macro\FV@BreakBefore@Def{% - \@namedef{FV@BreakBefore@Token\detokenize{##1}}{}}% - \FV@BreakBefore@Process - }% - \FV@EscChars - \expandafter\FV@BreakBefore@Process\FV@BreakBefore\FV@Undefined - \endgroup - \FV@BreakBefore@Def - \FV@BreakBeforePrep@PygmentsHook - \fi -} -\def\FV@BreakAfterPrep@UTF{% - \ifx\FV@BreakAfter\@empty\relax - \else - \gdef\FV@BreakAfter@Def{}% - \begingroup - \def\FV@BreakAfter@Process##1{% - \ifcsname FV@U8:\detokenize{##1}\endcsname - \expandafter\let\expandafter\FV@Break@Next\csname FV@U8:\detokenize{##1}\endcsname - \let\FV@UTF@octets@after\FV@BreakAfter@Process@ii - \else - \ifx##1\FV@Undefined - \let\FV@Break@Next\@gobble - \else - \let\FV@Break@Next\FV@BreakAfter@Process@i - \fi - \fi - \FV@Break@Next##1% - }% - \def\FV@BreakAfter@Process@i##1{% - \expandafter\FV@BreakAfter@Process@ii\expandafter{##1}}% - \def\FV@BreakAfter@Process@ii##1{% - \ifcsname FV@BreakBefore@Token\detokenize{##1}\endcsname - \ifbool{FV@breakbeforeinrun}% - {\ifbool{FV@breakafterinrun}% - {}% - {\PackageError{fvextra}% - {Conflicting breakbeforeinrun and breakafterinrun for "\detokenize{##1}"}% - {Conflicting breakbeforeinrun and breakafterinrun for "\detokenize{##1}"}}}% - {\ifbool{FV@breakafterinrun}% - {\PackageError{fvextra}% - {Conflicting breakbeforeinrun and breakafterinrun for "\detokenize{##1}"}% - {Conflicting breakbeforeinrun and breakafterinrun for "\detokenize{##1}"}}% - {}}% - \fi - \g@addto@macro\FV@BreakAfter@Def{% - \@namedef{FV@BreakAfter@Token\detokenize{##1}}{}}% - \FV@BreakAfter@Process - }% - \FV@EscChars - \expandafter\FV@BreakAfter@Process\FV@BreakAfter\FV@Undefined - \endgroup - \FV@BreakAfter@Def - \FV@BreakAfterPrep@PygmentsHook - \fi -} -\def\FV@Break@AnyToken@UTF#1{% - \ifcsname FV@U8:\detokenize{#1}\endcsname - \expandafter\let\expandafter\FV@Break@Next\csname FV@U8:\detokenize{#1}\endcsname - \let\FV@UTF@octets@after\FV@Break@AnyToken@UTF@i - \else - \let\FV@Break@Next\FV@Break@AnyToken@UTF@i - \fi - \FV@Break@Next{#1}% -} -\def\FV@Break@AnyToken@UTF@i#1{% - \def\FV@CurrentToken{#1}% - \ifx\FV@CurrentToken\FV@ActiveSpaceToken\relax - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {\let\FV@LastToken\FV@CurrentToken - \FV@BreakBuffer@Append{#1}\FV@Break@Scan}% - {\ifx\FV@LastToken\FV@ActiveSpaceToken - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {\let\FV@LastToken\FV@CurrentToken - \FV@BreakBuffer@Append{#1}\FV@Break@Scan}% - {\let\FV@LastToken\FV@CurrentToken - \FV@BreakBuffer@Append{\FancyVerbBreakAnywhereBreak#1}\FV@Break@Scan}}} -\def\FV@Break@BeforeAfterToken@UTF#1{% - \ifcsname FV@U8:\detokenize{#1}\endcsname - \expandafter\let\expandafter\FV@Break@Next\csname FV@U8:\detokenize{#1}\endcsname - \let\FV@UTF@octets@after\FV@Break@BeforeAfterToken@UTF@i - \else - \let\FV@Break@Next\FV@Break@BeforeAfterToken@UTF@i - \fi - \FV@Break@Next{#1}% -} -\def\FV@Break@BeforeAfterToken@UTF@i#1{% - \ifcsname FV@BreakBefore@Token\detokenize{#1}\endcsname - \let\FV@Break@Next\FV@Break@BeforeTokenBreak@UTF - \else - \ifcsname FV@BreakAfter@Token\detokenize{#1}\endcsname - \let\FV@Break@Next\FV@Break@AfterTokenBreak@UTF - \else - \let\FV@Break@Next\FV@Break@BeforeAfterTokenNoBreak@UTF - \fi - \fi - \FV@Break@Next{#1}% -} -\def\FV@Break@BeforeAfterTokenNoBreak@UTF#1{% - \FV@BreakBuffer@Append{#1}% - \def\FV@LastToken{#1}% - \FV@Break@Scan} -\def\FV@Break@BeforeTokenBreak@UTF#1{% - \def\FV@CurrentToken{#1}% - \ifbool{FV@breakbeforeinrun}% - {\ifcsname FV@BreakAfter@Token\detokenize{#1}\endcsname - \ifx\FV@CurrentToken\FV@ActiveSpaceToken - \FV@BreakBuffer@Append{\FancyVerbSpaceBreak}% - \else - \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak}% - \fi - \let\FV@Break@Next\FV@Break@BeforeTokenBreak@AfterRescan@UTF - \def\FV@RescanToken{#1}% - \else - \ifx\FV@CurrentToken\FV@ActiveSpaceToken - \FV@BreakBuffer@Append{\FancyVerbSpaceBreak#1}% - \else - \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak#1}% - \fi - \let\FV@Break@Next\FV@Break@Scan - \def\FV@LastToken{#1}% - \fi}% - {\ifx\FV@CurrentToken\FV@LastToken\relax - \ifcsname FV@BreakAfter@Token\detokenize{#1}\endcsname - \let\FV@Break@Next\FV@Break@BeforeTokenBreak@AfterRescan@UTF - \def\FV@RescanToken{#1}% - \else - \FV@BreakBuffer@Append{#1}% - \let\FV@Break@Next\FV@Break@Scan - \def\FV@LastToken{#1}% - \fi - \else - \ifcsname FV@BreakAfter@Token\detokenize{#1}\endcsname - \ifx\FV@CurrentToken\FV@ActiveSpaceToken - \FV@BreakBuffer@Append{\FancyVerbSpaceBreak}% - \else - \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak}% - \fi - \let\FV@Break@Next\FV@Break@BeforeTokenBreak@AfterRescan@UTF - \def\FV@RescanToken{#1}% - \else - \ifx\FV@CurrentToken\FV@ActiveSpaceToken - \FV@BreakBuffer@Append{\FancyVerbSpaceBreak#1}% - \else - \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak#1}% - \fi - \let\FV@Break@Next\FV@Break@Scan - \def\FV@LastToken{#1}% - \fi - \fi}% - \FV@Break@Next} -\def\FV@Break@BeforeTokenBreak@AfterRescan@UTF{% - \expandafter\FV@Break@AfterTokenBreak@UTF\expandafter{\FV@RescanToken}} -\def\FV@Break@AfterTokenBreak@UTF#1{% - \def\FV@LastToken{#1}% - \@ifnextchar\FV@FVSpaceToken% - {\ifx\FV@LastToken\FV@ActiveSpaceToken - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {\FV@Break@AfterTokenBreak@UTF@i{#1}}% - {\FV@BreakBuffer@Append{#1}% - \FV@Break@Scan}}% - {\FV@Break@AfterTokenBreak@UTF@i{#1}}} -\def\FV@Break@AfterTokenBreak@UTF@i#1{% - \ifbool{FV@breakafterinrun}% - {\ifx\FV@LastToken\FV@ActiveSpaceToken - \FV@BreakBuffer@Append{#1\FancyVerbSpaceBreak}% - \else - \FV@BreakBuffer@Append{#1\FancyVerbBreakAfterBreak}% - \fi - \let\FV@Break@Next\FV@Break@Scan}% - {\FV@BreakBuffer@Append{#1}% - \expandafter\ifx\csname @let@token\endcsname\bgroup\relax - \let\FV@Break@Next\FV@Break@AfterTokenBreak@Group@UTF - \else - \let\FV@Break@Next\FV@Break@AfterTokenBreak@UTF@ii - \fi}% - \FV@Break@Next} -\def\FV@Break@AfterTokenBreak@UTF@ii#1{% - \ifcsname FV@U8:\detokenize{#1}\endcsname - \expandafter\let\expandafter\FV@Break@Next\csname FV@U8:\detokenize{#1}\endcsname - \let\FV@UTF@octets@after\FV@Break@AfterTokenBreak@UTF@ii - \else - \def\FV@NextToken{#1}% - \ifx\FV@LastToken\FV@NextToken - \else - \ifx\FV@LastToken\FV@ActiveSpaceToken - \FV@BreakBuffer@Append{\FancyVerbSpaceBreak}% - \else - \FV@BreakBuffer@Append{\FancyVerbBreakAfterBreak}% - \fi - \fi - \let\FV@Break@Next\FV@Break@Scan - \fi - \FV@Break@Next#1} -\def\FV@Break@AfterTokenBreak@Group@UTF#1{% - \ifstrempty{#1}% - {\FV@BreakBuffer@Append{{}}% - \@ifnextchar\bgroup - {\ifx\FV@LastToken\FV@ActiveSpaceToken - \FV@BreakBuffer@Append{\FancyVerbSpaceBreak}% - \else - \FV@BreakBuffer@Append{\FancyVerbBreakAfterBreak}% - \fi - \FV@Break@Group}% - {\FV@Break@AfterTokenBreak@Group@UTF@i}}% - {\ifx\FV@LastToken\FV@ActiveSpaceToken - \FV@BreakBuffer@Append{\FancyVerbSpaceBreak}% - \else - \FV@BreakBuffer@Append{\FancyVerbBreakAfterBreak}% - \fi - \FV@Break@Group{#1}}} -\def\FV@Break@AfterTokenBreak@Group@UTF@i#1{% - \ifcsname FV@U8:\detokenize{#1}\endcsname - \expandafter\let\expandafter\FV@Break@Next\csname FV@U8:\detokenize{#1}\endcsname - \let\FV@UTF@octets@after\FV@Break@AfterTokenBreak@Group@UTF@i - \else - \def\FV@NextToken{#1}% - \ifx\FV@LastToken\FV@NextToken - \else - \ifx\FV@LastToken\FV@ActiveSpaceToken - \FV@BreakBuffer@Append{\FancyVerbSpaceBreak}% - \else - \FV@BreakBuffer@Append{\FancyVerbBreakAfterBreak}% - \fi - \fi - \let\FV@Break@Next\FV@Break@Scan - \fi - \FV@Break@Next#1} -\fi -\def\FV@makeLineNumber{% - \hss - \FancyVerbBreakSymbolLeftLogic{\FancyVerbBreakSymbolLeft}% - \hbox to \FV@BreakSymbolSepLeft{\hfill}% - \rlap{\hskip\linewidth - \hbox to \FV@BreakSymbolSepRight{\hfill}% - \FancyVerbBreakSymbolRightLogic{\FancyVerbBreakSymbolRight}% - \FV@SetLineBreakLast - }% -} -\def\FV@RaggedRight{% - \let\\\@centercr - \@rightskip\@flushglue\rightskip\@rightskip\leftskip\z@skip\parindent\z@} -\newdimen\FV@LineWidth -\def\FV@SaveLineBox#1{% - \savebox{\FV@LineBox}{% - \advance\FV@LineWidth by -\FV@BreakIndent - \hbox to \FV@BreakIndent{\hfill}% - \ifbool{FV@breakautoindent}% - {\let\FV@LineIndentChars\@empty - \FV@GetLineIndent#1\FV@Sentinel - \savebox{\FV@LineIndentBox}{\FV@LineIndentChars}% - \hbox to \wd\FV@LineIndentBox{\hfill}% - \advance\FV@LineWidth by -\wd\FV@LineIndentBox - \setcounter{FV@TrueTabCounter}{0}}% - {}% - \ifdefempty{\FancyVerbBreakSymbolLeft}{}% - {\hbox to \FV@BreakSymbolIndentLeft{\hfill}% - \advance\FV@LineWidth by -\FV@BreakSymbolIndentLeft}% - \ifdefempty{\FancyVerbBreakSymbolRight}{}% - {\advance\FV@LineWidth by -\FV@BreakSymbolIndentRight}% - \parbox[t]{\FV@LineWidth}{% - \FV@RaggedRight - \leftlinenumbers* - \begin{internallinenumbers*}% - \let\makeLineNumber\FV@makeLineNumber - \noindent\hspace*{-\FV@BreakIndent}% - \ifdefempty{\FancyVerbBreakSymbolLeft}{}{% - \hspace*{-\FV@BreakSymbolIndentLeft}}% - \ifbool{FV@breakautoindent}% - {\hspace*{-\wd\FV@LineIndentBox}}% - {}% - \FV@BreakByTokenAnywhereHook - \strut\FV@InsertBreaks{\FancyVerbFormatText}{#1}\nobreak\strut - \end{internallinenumbers*} - }% - \ifdefempty{\FancyVerbBreakSymbolRight}{}% - {\hbox to \FV@BreakSymbolIndentRight{\hfill}}% - }% -} -\let\FV@BreakByTokenAnywhereHook\relax -\def\FV@ListProcessLine@Break#1{% - \hbox to \hsize{% - \kern\leftmargin - \hbox to \linewidth{% - \FV@LineWidth\linewidth - \ifx\FV@RightListFrame\relax\else - \advance\FV@LineWidth by -\FV@FrameSep - \advance\FV@LineWidth by -\FV@FrameRule - \fi - \ifx\FV@LeftListFrame\relax\else - \advance\FV@LineWidth by -\FV@FrameSep - \advance\FV@LineWidth by -\FV@FrameRule - \fi - \ifx\FV@Tab\FV@TrueTab - \let\FV@TrueTabSaveWidth\FV@TrueTabSaveWidth@Save - \setcounter{FV@TrueTabCounter}{0}% - \fi - \sbox{\FV@LineBox}{% - \let\FancyVerbBreakStart\relax - \let\FancyVerbBreakStop\relax - \FancyVerbFormatLine{% - %\FancyVerbHighlightLine %<-- Default definition using \rlap breaks breaking - {\FV@ObeyTabs{\FancyVerbFormatText{#1}}}}}% - \ifx\FV@Tab\FV@TrueTab - \let\FV@TrueTabSaveWidth\relax - \fi - \ifdim\wd\FV@LineBox>\FV@LineWidth - \setcounter{FancyVerbLineBreakLast}{0}% - \ifx\FV@Tab\FV@TrueTab - \let\FV@Tab\FV@TrueTab@UseWidth - \setcounter{FV@TrueTabCounter}{0}% - \fi - \FV@SaveLineBox{#1}% - \ifdefempty{\FancyVerbBreakSymbolRight}{}{% - \let\FV@SetLineBreakLast\relax - \setcounter{FV@TrueTabCounter}{0}% - \FV@SaveLineBox{#1}}% - \FV@LeftListNumber - \FV@LeftListFrame - \FV@BGColor@List{% - \FancyVerbFormatLine{% - \FancyVerbHighlightLine{\usebox{\FV@LineBox}}}}% - \FV@RightListFrame - \FV@RightListNumber - \ifx\FV@Tab\FV@TrueTab@UseWidth - \let\FV@Tab\FV@TrueTab - \fi - \else - \let\FancyVerbBreakStart\relax - \let\FancyVerbBreakStop\relax - \FV@LeftListNumber - \FV@LeftListFrame - \FV@BGColor@List{% - \FancyVerbFormatLine{% - \FancyVerbHighlightLine{% - \parbox[t]{\FV@LineWidth}{% - \noindent\strut\FV@ObeyTabs{\FancyVerbFormatText{#1}}\strut}}}}% - \FV@RightListFrame - \FV@RightListNumber - \fi}% - \hss}\baselineskip\z@\lineskip\z@} -\def\FV@BreakBeforePrep@Pygments#1{% - \ifcsname FV@BreakBefore@Token\@backslashchar\endcsname - \@namedef{FV@BreakBefore@Token#1Zbs }{}% - \fi - \ifcsname FV@BreakBefore@Token\FV@underscorechar\endcsname - \@namedef{FV@BreakBefore@Token#1Zus }{}% - \fi - \ifcsname FV@BreakBefore@Token\@charlb\endcsname - \@namedef{FV@BreakBefore@Token#1Zob }{}% - \fi - \ifcsname FV@BreakBefore@Token\@charrb\endcsname - \@namedef{FV@BreakBefore@Token#1Zcb }{}% - \fi - \ifcsname FV@BreakBefore@Token\detokenize{^}\endcsname - \@namedef{FV@BreakBefore@Token#1Zca }{}% - \fi - \ifcsname FV@BreakBefore@Token\FV@ampchar\endcsname - \@namedef{FV@BreakBefore@Token#1Zam }{}% - \fi - \ifcsname FV@BreakBefore@Token\detokenize{<}\endcsname - \@namedef{FV@BreakBefore@Token#1Zlt }{}% - \fi - \ifcsname FV@BreakBefore@Token\detokenize{>}\endcsname - \@namedef{FV@BreakBefore@Token#1Zgt }{}% - \fi - \ifcsname FV@BreakBefore@Token\FV@hashchar\endcsname - \@namedef{FV@BreakBefore@Token#1Zsh }{}% - \fi - \ifcsname FV@BreakBefore@Token\@percentchar\endcsname - \@namedef{FV@BreakBefore@Token#1Zpc }{}% - \fi - \ifcsname FV@BreakBefore@Token\FV@dollarchar\endcsname - \@namedef{FV@BreakBefore@Token#1Zdl }{}% - \fi - \ifcsname FV@BreakBefore@Token\detokenize{-}\endcsname - \@namedef{FV@BreakBefore@Token#1Zhy }{}% - \fi - \ifcsname FV@BreakBefore@Token\detokenize{'}\endcsname - \@namedef{FV@BreakBefore@Token#1Zsq }{}% - \fi - \ifcsname FV@BreakBefore@Token\detokenize{"}\endcsname - \@namedef{FV@BreakBefore@Token#1Zdq }{}% - \fi - \ifcsname FV@BreakBefore@Token\FV@tildechar\endcsname - \@namedef{FV@BreakBefore@Token#1Zti }{}% - \fi - \ifcsname FV@BreakBefore@Token\detokenize{@}\endcsname - \@namedef{FV@BreakBefore@Token#1Zat }{}% - \fi - \ifcsname FV@BreakBefore@Token\detokenize{[}\endcsname - \@namedef{FV@BreakBefore@Token#1Zlb }{}% - \fi - \ifcsname FV@BreakBefore@Token\detokenize{]}\endcsname - \@namedef{FV@BreakBefore@Token#1Zrb }{}% - \fi -} -\def\FV@BreakAfterPrep@Pygments#1{% - \ifcsname FV@BreakAfter@Token\@backslashchar\endcsname - \@namedef{FV@BreakAfter@Token#1Zbs }{}% - \fi - \ifcsname FV@BreakAfter@Token\FV@underscorechar\endcsname - \@namedef{FV@BreakAfter@Token#1Zus }{}% - \fi - \ifcsname FV@BreakAfter@Token\@charlb\endcsname - \@namedef{FV@BreakAfter@Token#1Zob }{}% - \fi - \ifcsname FV@BreakAfter@Token\@charrb\endcsname - \@namedef{FV@BreakAfter@Token#1Zcb }{}% - \fi - \ifcsname FV@BreakAfter@Token\detokenize{^}\endcsname - \@namedef{FV@BreakAfter@Token#1Zca }{}% - \fi - \ifcsname FV@BreakAfter@Token\FV@ampchar\endcsname - \@namedef{FV@BreakAfter@Token#1Zam }{}% - \fi - \ifcsname FV@BreakAfter@Token\detokenize{<}\endcsname - \@namedef{FV@BreakAfter@Token#1Zlt }{}% - \fi - \ifcsname FV@BreakAfter@Token\detokenize{>}\endcsname - \@namedef{FV@BreakAfter@Token#1Zgt }{}% - \fi - \ifcsname FV@BreakAfter@Token\FV@hashchar\endcsname - \@namedef{FV@BreakAfter@Token#1Zsh }{}% - \fi - \ifcsname FV@BreakAfter@Token\@percentchar\endcsname - \@namedef{FV@BreakAfter@Token#1Zpc }{}% - \fi - \ifcsname FV@BreakAfter@Token\FV@dollarchar\endcsname - \@namedef{FV@BreakAfter@Token#1Zdl }{}% - \fi - \ifcsname FV@BreakAfter@Token\detokenize{-}\endcsname - \@namedef{FV@BreakAfter@Token#1Zhy }{}% - \fi - \ifcsname FV@BreakAfter@Token\detokenize{'}\endcsname - \@namedef{FV@BreakAfter@Token#1Zsq }{}% - \fi - \ifcsname FV@BreakAfter@Token\detokenize{"}\endcsname - \@namedef{FV@BreakAfter@Token#1Zdq }{}% - \fi - \ifcsname FV@BreakAfter@Token\FV@tildechar\endcsname - \@namedef{FV@BreakAfter@Token#1Zti }{}% - \fi - \ifcsname FV@BreakAfter@Token\detokenize{@}\endcsname - \@namedef{FV@BreakAfter@Token#1Zat }{}% - \fi - \ifcsname FV@BreakAfter@Token\detokenize{[}\endcsname - \@namedef{FV@BreakAfter@Token#1Zlb }{}% - \fi - \ifcsname FV@BreakAfter@Token\detokenize{]}\endcsname - \@namedef{FV@BreakAfter@Token#1Zrb }{}% - \fi -} -\newbool{FV@breakbytoken} -\define@booleankey{FV}{breakbytoken}% - {\booltrue{FV@breakbytoken}}% - {\boolfalse{FV@breakbytoken}\boolfalse{FV@breakbytokenanywhere}} -\newbool{FV@breakbytokenanywhere} -\define@booleankey{FV}{breakbytokenanywhere}% - {\booltrue{FV@breakbytokenanywhere}\booltrue{FV@breakbytoken}}% - {\boolfalse{FV@breakbytokenanywhere}\boolfalse{FV@breakbytoken}} -\def\FancyVerbBreakByTokenAnywhereBreak{\allowbreak{}} -\def\VerbatimPygments#1#2{% - \def\FV@PygmentsHook{\FV@VerbatimPygments{#1}{#2}}} -\def\FV@VerbatimPygments#1#2{% - \edef\FV@PYG@Literal{\expandafter\FV@DetokMacro@StripSpace\detokenize{#1}}% - \def\FV@BreakBeforePrep@PygmentsHook{% - \expandafter\FV@BreakBeforePrep@Pygments\expandafter{\FV@PYG@Literal}}% - \def\FV@BreakAfterPrep@PygmentsHook{% - \expandafter\FV@BreakAfterPrep@Pygments\expandafter{\FV@PYG@Literal}}% - \ifx#2\relax - \let\FV@PYG=#1\relax - \else - \let\FV@PYG=#2\relax - \fi - \ifbool{FV@breakbytoken}% - {\ifbool{FV@breakbytokenanywhere}% - {\def\FV@BreakByTokenAnywhereHook{% - \def\FV@BreakByTokenAnywhereBreak{% - \let\FV@BreakByTokenAnywhereBreak\FancyVerbBreakByTokenAnywhereBreak}}% - \def#1##1##2{% - \FV@BreakByTokenAnywhereBreak - \leavevmode\hbox{\FV@PYG{##1}{##2}}}}% - {\def#1##1##2{% - \leavevmode\hbox{\FV@PYG{##1}{##2}}}}}% - {\def#1##1##2{% - \FV@PYG{##1}{\FancyVerbBreakStart##2\FancyVerbBreakStop}}}% - \let\FV@PYG@Redefed=#1\relax -} -\let\FV@BreakByTokenAnywhereBreak\relax -\def\FV@DetokMacro@StripSpace#1 {#1} -%% \Finale -\endinput -%% -%% End of file `fvextra.sty'. diff --git a/mwe.tex b/mwe.tex deleted file mode 100644 index 35628ce..0000000 --- a/mwe.tex +++ /dev/null @@ -1,49 +0,0 @@ -\documentclass{standalone} -\usepackage{tikz,fvextra,minted,luacode} -\usetikzlibrary{positioning} -\directlua{ os.execute "mkdir -p examples" } - -\NewDocumentCommand{\LineCount}{m}{\directlua{ - local n, f = 0, io.open("examples/#1.tex") - for l in f:lines() do n = n + 1 end - tex.print( n - 1 ) -}} - -\newwrite\examplefile - -\NewDocumentEnvironment{ShortExample}{m}{ - \VerbatimEnvironment - \immediate\openout\examplefile=examples/#1.tex\relax - \begin{VerbatimWrite}[writefilehandle=\examplefile] - \documentclass{standalone} - \begin{document} - \end{VerbatimWrite} - \begin{VerbatimWrite}[writefilehandle=\examplefile]}% - {\end{VerbatimWrite} - \begin{VerbatimWrite}[writefilehandle=\examplefile] - \end{document} - \end{VerbatimWrite} - \immediate\closeout\examplefile - \directlua{ os.execute( "cd examples ; latexmk -pdflua ".."#1"..".tex" ) } - \edef\lc{\LineCount{#1}} - \begin{tikzpicture} - \node[anchor=north west, inner sep=1ex, draw] (code) { - \begin{minipage}[t]{0.45\textwidth} - \inputminted[autogobble=true,firstline=3,lastline=\lc]{tex}{examples/#1.tex} - \end{minipage} - }; - \node[anchor=north west, right=2mm of code, draw] (output) { - \begin{minipage}[t]{0.45\textwidth} - \includegraphics[width=\linewidth]{examples/#1.pdf} - \end{minipage} - }; - \end{tikzpicture} -} - -\begin{document} - -\begin{ShortExample}{test} - Test -\end{ShortExample} - -\end{document}