- this solve default margins
- wrapping code correcly
- install pandoc
brew install pandoc
- run command to generate PDF
sh makepdf.sh
| %% | |
| %% 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-2022 by Geoffrey M. Poore <[email protected]> | |
| %% -------------------------------------------------------------------------- | |
| %% 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} | |
| [2022/11/30 v1.5 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}}{} | |
| \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@<Sentinel>} | |
| \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 | |
| \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}\FV@EOL}% | |
| {\endgroup | |
| \catcode`\ =\active | |
| \catcode`\^^I=\active | |
| \FV@ReadVArg@Char{#1}\FV@EOL}} | |
| \def\FV@ReadVArg@Group#1#2#3{% | |
| \endgroup | |
| #1{#3}} | |
| \def\FV@ReadVArg@Char#1#2#3{% | |
| \expandafter\expandafter\expandafter | |
| \if\expandafter\expandafter\expandafter\relax\expandafter\@gobble\detokenize{#3}\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##3#3{% | |
| \endgroup | |
| ##1{##3}}% | |
| \FV@ReadVArg@Char@i{#1}\FV@EOL}% | |
| \ifFV@pdfTeXinputenc | |
| \def\FV@ReadVArg@Char@UTF#1#2#3{% | |
| \expandafter\expandafter\expandafter | |
| \if\expandafter\expandafter\expandafter\relax\expandafter\@gobble\detokenize{#3}\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{#3}\endcsname | |
| \expandafter\@firstoftwo | |
| \else | |
| \expandafter\@secondoftwo | |
| \fi | |
| {\def\FV@UTF@octets@after##1{\FV@ReadVArg@Char@UTF@i{#1}{##1}}% | |
| \csname FV@U8:\detokenize{#3}\endcsname#3}% | |
| {\FV@ReadVArg@Char@UTF@i{#1}{#3}}} | |
| \def\FV@ReadVArg@Char@UTF@i#1#2{% | |
| \def\FV@ReadVArg@Char@i##1##2##3#2{% | |
| \endgroup | |
| ##1{##3}}% | |
| \FV@ReadVArg@Char@i{#1}\FV@EOL}% | |
| \fi | |
| \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#3{% | |
| \FVExtraAlwaysUnexpanded{\FVExtraUnexpandedReadStarOArgMArgBVArg#1{#2}{#3}}} | |
| \FVExtrapdfstringdefDisableCommands{% | |
| \makeatletter | |
| \def\FV@UnexpandedReadStarOArgMArgBVArg@i#1#2#3{% | |
| \FVExtraPDFStringVerbatimDetokenize{#3}}% | |
| \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@<Sentinel>} | |
| \gdef\FV@VDetok@Scan#1 #2\FV@<Sentinel>{% | |
| \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@<Sentinel>}}} | |
| \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@<Sentinel>}}% | |
| %<-catcode 12 space | |
| \FV@VDetok@Scan{}#2\FV@<Sentinel>}% | |
| \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@<Sentinel>^^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@<Sentinel>#2^^C(% | |
| \if\relax\detokenize(#2)\relax | |
| \expandafter\@firstofone | |
| \else | |
| \expandafter\@gobble | |
| \fi | |
| ({\FV@VDetok@Scan#1^^C \FV@<Sentinel>}\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@<Sentinel>}} | |
| \gdef\FV@VDetok@ScanToken@i#1 #2\FV@<Sentinel>{% | |
| \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@<Sentinel>}} | |
| \begingroup | |
| \catcode`\ =12% | |
| \gdef\FV@VDetok@ScanTokenActiveSpace{ \FV@VDetok@ScanToken}% | |
| \endgroup | |
| \gdef\FV@VDetok@ScanTokenWithSpace@i#1#2\FV@<Sentinel>{% | |
| \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@<Sentinel>} | |
| \gdef\FV@PDFStrVDetok@Scan#1 #2\FV@<Sentinel>{% | |
| \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@<Sentinel>}}} | |
| \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@<Sentinel>}}% | |
| %<-catcode 12 space | |
| \FV@PDFStrVDetok@Scan{}#2\FV@<Sentinel>}% | |
| \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@<Sentinel>^^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@<Sentinel>#2^^C(% | |
| \if\relax\detokenize(#2)\relax | |
| \expandafter\@firstofone | |
| \else | |
| \expandafter\@gobble | |
| \fi | |
| ({\FV@PDFStrVDetok@Scan#1^^C \FV@<Sentinel>}\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@<Sentinel>}} | |
| \gdef\FV@PDFStrVDetok@ScanToken@i#1 #2\FV@<Sentinel>{% | |
| \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@<Sentinel>}} | |
| \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@<Sentinel>{% | |
| \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@<Sentinel>} | |
| \gdef\FV@EscVDetok@Scan#1 #2\FV@<Sentinel>{% | |
| \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@<Sentinel>}}} | |
| \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@<Sentinel>}}% | |
| %<-catcode 12 space | |
| \FV@EscVDetok@Scan{}#2\FV@<Sentinel>}% | |
| \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@<Sentinel>^^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@<Sentinel>#2^^C(% | |
| \if\relax\detokenize(#2)\relax | |
| \expandafter\@firstofone | |
| \else | |
| \expandafter\@gobble | |
| \fi | |
| ({\FV@EscVDetok@Scan#1^^C \FV@<Sentinel>}\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@<Sentinel>}} | |
| \gdef\FV@EscVDetok@ScanToken@i#1 #2\FV@<Sentinel>{% | |
| \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@<InvalidEscape>\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@<Sentinel>}} | |
| \begingroup | |
| \catcode`\ =12% | |
| \gdef\FV@EscVDetok@ScanTokenActiveSpace{ \FV@EscVDetok@ScanToken}% | |
| \endgroup | |
| \gdef\FV@EscVDetok@ScanTokenWithSpace@i#1#2\FV@<Sentinel>{% | |
| \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@<Sentinel>{% | |
| \if\relax\detokenize{#2}\relax | |
| \expandafter\@firstoftwo | |
| \else | |
| \expandafter\@secondoftwo | |
| \fi | |
| {\FV@EscVDetok@ScanTokenEscSpace{#1}}% | |
| {\noexpand\FV@<InvalidEscape>\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@<Sentinel>} | |
| \gdef\FV@PDFStrEscVDetok@Scan#1 #2\FV@<Sentinel>{% | |
| \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@<Sentinel>}}} | |
| \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@<Sentinel>}}% | |
| \040%<-space | |
| !FV@PDFStrEscVDetok@Scan{}#2!FV@<Sentinel>}% | |
| !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@<Sentinel>^^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@<Sentinel>#2^^C(% | |
| \if\relax\detokenize(#2)\relax | |
| \expandafter\@firstofone | |
| \else | |
| \expandafter\@gobble | |
| \fi | |
| ({\FV@PDFStrEscVDetok@Scan#1^^C \FV@<Sentinel>}\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@<Sentinel>}} | |
| \gdef\FV@PDFStrEscVDetok@ScanToken@i#1 #2\FV@<Sentinel>{% | |
| \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@<Sentinel>}} | |
| \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@<Sentinel>{% | |
| \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@<InvalidEscape>\FV@<Sentinel> | |
| \expandafter\FV@DetokenizeVArg@i\expandafter{\FV@Tmp}{#1}} | |
| \gdef\FV@DetokenizeREscVArg@InvalidEscapeCheck#1\FV@<InvalidEscape>#2\FV@<Sentinel>{% | |
| \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 <char> 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}} | |
| \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 | |
| \FVExtraReadVArg{% | |
| \FV@UseInlineKeyValues\FV@UseKeyValues\FV@FormattingPrep | |
| \FVExtraDetokenizeVArg{% | |
| \FVExtraRetokenizeVArg{\FVC@Verb@Extra@ii}{\FV@CatCodes}}}} | |
| \def\FVC@Verb@Extra@ii#1{% | |
| \ifFV@breaklines | |
| \expandafter\@firstoftwo | |
| \else | |
| \expandafter\@secondoftwo | |
| \fi | |
| {\FV@InsertBreaks{\FancyVerbFormatInline}{#1}}% | |
| {\mbox{#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 | |
| \FVExtraReadVArg{% | |
| \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}} | |
| \def\FV@UseVerb@Extra#1{% | |
| \ifFV@breaklines | |
| \expandafter\@firstoftwo | |
| \else | |
| \expandafter\@secondoftwo | |
| \fi | |
| {\FV@InsertBreaks{\FancyVerbFormatInline}{#1}}% | |
| {\mbox{#1}}% | |
| \endgroup} | |
| \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}} | |
| \def\FVC@EscVerb@ii#1{% | |
| \ifFV@breaklines | |
| \expandafter\@firstoftwo | |
| \else | |
| \expandafter\@secondoftwo | |
| \fi | |
| {\FV@InsertBreaks{\FancyVerbFormatInline}{#1}}% | |
| {\mbox{#1}}% | |
| \endgroup} | |
| \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<fvextra><Missing environment contents><Missing environment contents>% | |
| !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<fvextra><Missing end for environment !FV@EnvironName><Add environment end>% | |
| !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<fvextra>% | |
| <Discarded text after end of environment !FV@EnvironName>% | |
| <Discarded text after end of environment !FV@EnvironName>% | |
| !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} | |
| \def\FV@Command#1#2{% | |
| \FVExtra@ifstarVArg | |
| {\def\FV@KeyValues{#1,showspaces}\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{\textvisiblespace} | |
| \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} | |
| \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}}}}} | |
| \define@booleankey{FV}{showspaces}% | |
| {\def\FV@Space{\FV@SpaceColor{\FancyVerbSpace}}}% | |
| {\def\FV@Space{\ }} | |
| \fvset{spacecolor=none, showspaces=false} | |
| \define@booleankey{FV}{mathescape}% | |
| {\let\FancyVerbMathEscape\FV@MathEscape}% | |
| {\let\FancyVerbMathEscape\relax} | |
| \def\FV@MathEscape{\catcode`\$=3\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 | |
| \FancyVerbFormatLine{% | |
| \FancyVerbHighlightLine{% | |
| \FV@ObeyTabs{\FancyVerbFormatText{#1}}}}\hss | |
| \FV@RightListFrame | |
| \FV@RightListNumber}% | |
| \hss}} | |
| \def\FV@BProcessLine#1{% | |
| \hbox{\FancyVerbFormatLine{% | |
| \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}{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} | |
| \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}{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} | |
| \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@Break@LastToken=\FV@Undefined | |
| \FV@Break@Scan} | |
| \def\FV@Break@AnyToken#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 | |
| \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak}% | |
| \let\FV@Break@Next\FV@Break@BeforeTokenBreak@AfterRescan | |
| \def\FV@RescanToken{#1}% | |
| \else | |
| \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak#1}% | |
| \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 | |
| \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak}% | |
| \let\FV@Break@Next\FV@Break@BeforeTokenBreak@AfterRescan | |
| \def\FV@RescanToken{#1}% | |
| \else | |
| \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak#1}% | |
| \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% | |
| {\FV@BreakBuffer@Append{#1}\FV@Break@Scan}% | |
| {\ifbool{FV@breakafterinrun}% | |
| {\FV@BreakBuffer@Append{#1\FancyVerbBreakAfterBreak}% | |
| \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 | |
| \FV@BreakBuffer@Append{#1\FancyVerbBreakAfterBreak}% | |
| \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}% | |
| {\FV@BreakBuffer@Append{\FancyVerbBreakAfterBreak}% | |
| \FV@Break@Scan}}% | |
| {\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{% | |
| \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 | |
| \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak}% | |
| \let\FV@Break@Next\FV@Break@BeforeTokenBreak@AfterRescan@UTF | |
| \def\FV@RescanToken{#1}% | |
| \else | |
| \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak#1}% | |
| \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 | |
| \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak}% | |
| \let\FV@Break@Next\FV@Break@BeforeTokenBreak@AfterRescan@UTF | |
| \def\FV@RescanToken{#1}% | |
| \else | |
| \FV@BreakBuffer@Append{\FancyVerbBreakBeforeBreak#1}% | |
| \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% | |
| {\FV@BreakBuffer@Append{#1}\FV@Break@Scan}% | |
| {\ifbool{FV@breakafterinrun}% | |
| {\FV@BreakBuffer@Append{#1\FancyVerbBreakAfterBreak}% | |
| \let\FV@Break@Next\FV@Break@Scan}% | |
| {\FV@BreakBuffer@Append{#1}% | |
| \ifx\@let@token\bgroup\relax | |
| \let\FV@Break@Next\FV@Break@AfterTokenBreak@Group@UTF | |
| \else | |
| \let\FV@Break@Next\FV@Break@AfterTokenBreak@UTF@i | |
| \fi}% | |
| \FV@Break@Next}% | |
| } | |
| \def\FV@Break@AfterTokenBreak@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@UTF@i | |
| \else | |
| \def\FV@NextToken{#1}% | |
| \ifx\FV@LastToken\FV@NextToken | |
| \else | |
| \FV@BreakBuffer@Append{\FancyVerbBreakAfterBreak}% | |
| \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 | |
| {\FV@Break@Group}% | |
| {\FV@Break@AfterTokenBreak@Group@UTF@i}}% | |
| {\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 | |
| \FV@BreakBuffer@Append{\FancyVerbBreakAfterBreak}% | |
| \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 | |
| \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 | |
| \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'. |
| pandoc -s -N --template=template.latex -V geometry:margin=.3in README.md -o output.pdf |
| % Options for packages loaded elsewhere | |
| \PassOptionsToPackage{unicode$for(hyperrefoptions)$,$hyperrefoptions$$endfor$}{hyperref} | |
| \PassOptionsToPackage{hyphens}{url} | |
| $if(colorlinks)$ | |
| \PassOptionsToPackage{dvipsnames,svgnames,x11names}{xcolor} | |
| $endif$ | |
| $if(CJKmainfont)$ | |
| \PassOptionsToPackage{space}{xeCJK} | |
| $endif$ | |
| % | |
| \documentclass[ | |
| $if(fontsize)$ | |
| $fontsize$, | |
| $endif$ | |
| $if(papersize)$ | |
| $papersize$paper, | |
| $endif$ | |
| $if(beamer)$ | |
| ignorenonframetext, | |
| $if(handout)$ | |
| handout, | |
| $endif$ | |
| $if(aspectratio)$ | |
| aspectratio=$aspectratio$, | |
| $endif$ | |
| $endif$ | |
| $for(classoption)$ | |
| $classoption$$sep$, | |
| $endfor$ | |
| ]{$documentclass$} | |
| $if(beamer)$ | |
| $if(background-image)$ | |
| \usebackgroundtemplate{% | |
| \includegraphics[width=\paperwidth]{$background-image$}% | |
| } | |
| $endif$ | |
| \usepackage{pgfpages} | |
| \usepackage{fvextra} | |
| \begin{Highlighting}[breaklines,numbers=left,,] | |
| \setbeamertemplate{caption}[numbered] | |
| \setbeamertemplate{caption label separator}{: } | |
| \setbeamercolor{caption name}{fg=normal text.fg} | |
| \beamertemplatenavigationsymbols$if(navigation)$$navigation$$else$empty$endif$ | |
| $for(beameroption)$ | |
| \setbeameroption{$beameroption$} | |
| $endfor$ | |
| % Prevent slide breaks in the middle of a paragraph | |
| \widowpenalties 1 10000 | |
| \raggedbottom | |
| $if(section-titles)$ | |
| \setbeamertemplate{part page}{ | |
| \centering | |
| \begin{beamercolorbox}[sep=16pt,center]{part title} | |
| \usebeamerfont{part title}\insertpart\par | |
| \end{beamercolorbox} | |
| } | |
| \setbeamertemplate{section page}{ | |
| \centering | |
| \begin{beamercolorbox}[sep=12pt,center]{part title} | |
| \usebeamerfont{section title}\insertsection\par | |
| \end{beamercolorbox} | |
| } | |
| \setbeamertemplate{subsection page}{ | |
| \centering | |
| \begin{beamercolorbox}[sep=8pt,center]{part title} | |
| \usebeamerfont{subsection title}\insertsubsection\par | |
| \end{beamercolorbox} | |
| } | |
| \AtBeginPart{ | |
| \frame{\partpage} | |
| } | |
| \AtBeginSection{ | |
| \ifbibliography | |
| \else | |
| \frame{\sectionpage} | |
| \fi | |
| } | |
| \AtBeginSubsection{ | |
| \frame{\subsectionpage} | |
| } | |
| $endif$ | |
| $endif$ | |
| $if(beamerarticle)$ | |
| \usepackage{beamerarticle} % needs to be loaded first | |
| $endif$ | |
| \usepackage{amsmath,amssymb} | |
| $if(linestretch)$ | |
| \usepackage{setspace} | |
| $endif$ | |
| \usepackage{iftex} | |
| \ifPDFTeX | |
| \usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc} | |
| \usepackage[utf8]{inputenc} | |
| \usepackage{textcomp} % provide euro and other symbols | |
| \else % if luatex or xetex | |
| $if(mathspec)$ | |
| \ifXeTeX | |
| \usepackage{mathspec} % this also loads fontspec | |
| \else | |
| \usepackage{unicode-math} % this also loads fontspec | |
| \fi | |
| $else$ | |
| \usepackage{unicode-math} % this also loads fontspec | |
| $endif$ | |
| \defaultfontfeatures{Scale=MatchLowercase}$-- must come before Beamer theme | |
| \defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1} | |
| \fi | |
| $if(fontfamily)$ | |
| $else$ | |
| $-- Set default font before Beamer theme so the theme can override it | |
| \usepackage{lmodern} | |
| $endif$ | |
| $-- Set Beamer theme before user font settings so they can override theme | |
| $if(beamer)$ | |
| $if(theme)$ | |
| \usetheme[$for(themeoptions)$$themeoptions$$sep$,$endfor$]{$theme$} | |
| $endif$ | |
| $if(colortheme)$ | |
| \usecolortheme{$colortheme$} | |
| $endif$ | |
| $if(fonttheme)$ | |
| \usefonttheme{$fonttheme$} | |
| $endif$ | |
| $if(mainfont)$ | |
| \usefonttheme{serif} % use mainfont rather than sansfont for slide text | |
| $endif$ | |
| $if(innertheme)$ | |
| \useinnertheme{$innertheme$} | |
| $endif$ | |
| $if(outertheme)$ | |
| \useoutertheme{$outertheme$} | |
| $endif$ | |
| $endif$ | |
| $-- User font settings (must come after default font and Beamer theme) | |
| $if(fontfamily)$ | |
| \usepackage[$for(fontfamilyoptions)$$fontfamilyoptions$$sep$,$endfor$]{$fontfamily$} | |
| $endif$ | |
| \ifPDFTeX\else | |
| % xetex/luatex font selection | |
| $if(mainfont)$ | |
| \setmainfont[$for(mainfontoptions)$$mainfontoptions$$sep$,$endfor$]{$mainfont$} | |
| $endif$ | |
| $if(sansfont)$ | |
| \setsansfont[$for(sansfontoptions)$$sansfontoptions$$sep$,$endfor$]{$sansfont$} | |
| $endif$ | |
| $if(monofont)$ | |
| \setmonofont[$for(monofontoptions)$$monofontoptions$$sep$,$endfor$]{$monofont$} | |
| $endif$ | |
| $for(fontfamilies)$ | |
| \newfontfamily{$fontfamilies.name$}[$for(fontfamilies.options)$$fontfamilies.options$$sep$,$endfor$]{$fontfamilies.font$} | |
| $endfor$ | |
| $if(mathfont)$ | |
| $if(mathspec)$ | |
| \ifXeTeX | |
| \setmathfont(Digits,Latin,Greek)[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} | |
| \else | |
| \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} | |
| \fi | |
| $else$ | |
| \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} | |
| $endif$ | |
| $endif$ | |
| $if(CJKmainfont)$ | |
| \ifXeTeX | |
| \usepackage{xeCJK} | |
| \setCJKmainfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} | |
| $if(CJKsansfont)$ | |
| \setCJKsansfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKsansfont$} | |
| $endif$ | |
| $if(CJKmonofont)$ | |
| \setCJKmonofont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmonofont$} | |
| $endif$ | |
| \fi | |
| $endif$ | |
| $if(luatexjapresetoptions)$ | |
| \ifLuaTeX | |
| \usepackage[$for(luatexjapresetoptions)$$luatexjapresetoptions$$sep$,$endfor$]{luatexja-preset} | |
| \fi | |
| $endif$ | |
| $if(CJKmainfont)$ | |
| \ifLuaTeX | |
| \usepackage[$for(luatexjafontspecoptions)$$luatexjafontspecoptions$$sep$,$endfor$]{luatexja-fontspec} | |
| \setmainjfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} | |
| \fi | |
| $endif$ | |
| \fi | |
| $if(zero-width-non-joiner)$ | |
| %% Support for zero-width non-joiner characters. | |
| \makeatletter | |
| \def\zerowidthnonjoiner{% | |
| % Prevent ligatures and adjust kerning, but still support hyphenating. | |
| \texorpdfstring{% | |
| \TextOrMath{\nobreak\discretionary{-}{}{\kern.03em}% | |
| \ifvmode\else\nobreak\hskip\z@skip\fi}{}% | |
| }{}% | |
| } | |
| \makeatother | |
| \ifPDFTeX | |
| \DeclareUnicodeCharacter{200C}{\zerowidthnonjoiner} | |
| \else | |
| \catcode`^^^^200c=\active | |
| \protected\def ^^^^200c{\zerowidthnonjoiner} | |
| \fi | |
| %% End of ZWNJ support | |
| $endif$ | |
| % Use upquote if available, for straight quotes in verbatim environments | |
| \IfFileExists{upquote.sty}{\usepackage{upquote}}{} | |
| \IfFileExists{microtype.sty}{% use microtype if available | |
| \usepackage[$for(microtypeoptions)$$microtypeoptions$$sep$,$endfor$]{microtype} | |
| \UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts | |
| }{} | |
| $if(indent)$ | |
| $else$ | |
| \makeatletter | |
| \@ifundefined{KOMAClassName}{% if non-KOMA class | |
| \IfFileExists{parskip.sty}{% | |
| \usepackage{parskip} | |
| }{% else | |
| \setlength{\parindent}{0pt} | |
| \setlength{\parskip}{6pt plus 2pt minus 1pt}} | |
| }{% if KOMA class | |
| \KOMAoptions{parskip=half}} | |
| \makeatother | |
| $endif$ | |
| $if(verbatim-in-note)$ | |
| \usepackage{fancyvrb} | |
| $endif$ | |
| \usepackage{xcolor} | |
| $if(geometry)$ | |
| $if(beamer)$ | |
| \geometry{$for(geometry)$$geometry$$sep$,$endfor$} | |
| $else$ | |
| \usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry} | |
| $endif$ | |
| $endif$ | |
| $if(beamer)$ | |
| \newif\ifbibliography | |
| $endif$ | |
| $if(listings)$ | |
| \usepackage{listings} | |
| \newcommand{\passthrough}[1]{#1} | |
| \lstset{defaultdialect=[5.3]Lua} | |
| \lstset{defaultdialect=[x86masm]Assembler} | |
| $endif$ | |
| $if(lhs)$ | |
| \lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{} | |
| $endif$ | |
| $if(highlighting-macros)$ | |
| $highlighting-macros$ | |
| $endif$ | |
| $if(tables)$ | |
| \usepackage{longtable,booktabs,array} | |
| $if(multirow)$ | |
| \usepackage{multirow} | |
| $endif$ | |
| \usepackage{calc} % for calculating minipage widths | |
| $if(beamer)$ | |
| \usepackage{caption} | |
| % Make caption package work with longtable | |
| \makeatletter | |
| \def\fnum@table{\tablename~\thetable} | |
| \makeatother | |
| $else$ | |
| % Correct order of tables after \paragraph or \subparagraph | |
| \usepackage{etoolbox} | |
| \makeatletter | |
| \patchcmd\longtable{\par}{\if@noskipsec\mbox{}\fi\par}{}{} | |
| \makeatother | |
| % Allow footnotes in longtable head/foot | |
| \IfFileExists{footnotehyper.sty}{\usepackage{footnotehyper}}{\usepackage{footnote}} | |
| \makesavenoteenv{longtable} | |
| $endif$ | |
| $endif$ | |
| $if(graphics)$ | |
| \usepackage{graphicx} | |
| \makeatletter | |
| \def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi} | |
| \def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi} | |
| \makeatother | |
| % Scale images if necessary, so that they will not overflow the page | |
| % margins by default, and it is still possible to overwrite the defaults | |
| % using explicit options in \includegraphics[width, height, ...]{} | |
| \setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio} | |
| % Set default figure placement to htbp | |
| \makeatletter | |
| \def\fps@figure{htbp} | |
| \makeatother | |
| $endif$ | |
| $if(svg)$ | |
| \usepackage{svg} | |
| $endif$ | |
| $if(strikeout)$ | |
| $-- also used for underline | |
| \usepackage{soul} | |
| $endif$ | |
| \setlength{\emergencystretch}{3em} % prevent overfull lines | |
| \providecommand{\tightlist}{% | |
| \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} | |
| $if(numbersections)$ | |
| \setcounter{secnumdepth}{$if(secnumdepth)$$secnumdepth$$else$5$endif$} | |
| $else$ | |
| \setcounter{secnumdepth}{-\maxdimen} % remove section numbering | |
| $endif$ | |
| $if(subfigure)$ | |
| \usepackage{subcaption} | |
| $endif$ | |
| $if(beamer)$ | |
| $else$ | |
| $if(block-headings)$ | |
| % Make \paragraph and \subparagraph free-standing | |
| \ifx\paragraph\undefined\else | |
| \let\oldparagraph\paragraph | |
| \renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}} | |
| \fi | |
| \ifx\subparagraph\undefined\else | |
| \let\oldsubparagraph\subparagraph | |
| \renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}} | |
| \fi | |
| $endif$ | |
| $endif$ | |
| $if(pagestyle)$ | |
| \pagestyle{$pagestyle$} | |
| $endif$ | |
| $if(csl-refs)$ | |
| \newlength{\cslhangindent} | |
| \setlength{\cslhangindent}{1.5em} | |
| \newlength{\csllabelwidth} | |
| \setlength{\csllabelwidth}{3em} | |
| \newlength{\cslentryspacingunit} % times entry-spacing | |
| \setlength{\cslentryspacingunit}{\parskip} | |
| \newenvironment{CSLReferences}[2] % #1 hanging-ident, #2 entry spacing | |
| {% don't indent paragraphs | |
| \setlength{\parindent}{0pt} | |
| % turn on hanging indent if param 1 is 1 | |
| \ifodd #1 | |
| \let\oldpar\par | |
| \def\par{\hangindent=\cslhangindent\oldpar} | |
| \fi | |
| % set entry spacing | |
| \setlength{\parskip}{#2\cslentryspacingunit} | |
| }% | |
| {} | |
| \usepackage{calc} | |
| \newcommand{\CSLBlock}[1]{#1\hfill\break} | |
| \newcommand{\CSLLeftMargin}[1]{\parbox[t]{\csllabelwidth}{#1}} | |
| \newcommand{\CSLRightInline}[1]{\parbox[t]{\linewidth - \csllabelwidth}{#1}\break} | |
| \newcommand{\CSLIndent}[1]{\hspace{\cslhangindent}#1} | |
| $endif$ | |
| $if(lang)$ | |
| \ifLuaTeX | |
| \usepackage[bidi=basic]{babel} | |
| \else | |
| \usepackage[bidi=default]{babel} | |
| \fi | |
| $if(babel-lang)$ | |
| \babelprovide[main,import]{$babel-lang$} | |
| $if(mainfont)$ | |
| \ifPDFTeX | |
| \else | |
| \babelfont[$babel-lang$]{rm}{$mainfont$} | |
| \fi | |
| $endif$ | |
| $endif$ | |
| $for(babel-otherlangs)$ | |
| \babelprovide[import]{$babel-otherlangs$} | |
| $endfor$ | |
| % get rid of language-specific shorthands (see #6817): | |
| \let\LanguageShortHands\languageshorthands | |
| \def\languageshorthands#1{} | |
| $endif$ | |
| $for(header-includes)$ | |
| $header-includes$ | |
| $endfor$ | |
| \ifLuaTeX | |
| \usepackage{selnolig} % disable illegal ligatures | |
| \fi | |
| $if(dir)$ | |
| \ifPDFTeX | |
| \TeXXeTstate=1 | |
| \newcommand{\RL}[1]{\beginR #1\endR} | |
| \newcommand{\LR}[1]{\beginL #1\endL} | |
| \newenvironment{RTL}{\beginR}{\endR} | |
| \newenvironment{LTR}{\beginL}{\endL} | |
| \fi | |
| $endif$ | |
| $if(natbib)$ | |
| \usepackage[$natbiboptions$]{natbib} | |
| \bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$} | |
| $endif$ | |
| $if(biblatex)$ | |
| \usepackage[$if(biblio-style)$style=$biblio-style$,$endif$$for(biblatexoptions)$$biblatexoptions$$sep$,$endfor$]{biblatex} | |
| $for(bibliography)$ | |
| \addbibresource{$bibliography$} | |
| $endfor$ | |
| $endif$ | |
| $if(nocite-ids)$ | |
| \nocite{$for(nocite-ids)$$it$$sep$, $endfor$} | |
| $endif$ | |
| $if(csquotes)$ | |
| \usepackage{csquotes} | |
| $endif$ | |
| \IfFileExists{bookmark.sty}{\usepackage{bookmark}}{\usepackage{hyperref}} | |
| \IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available | |
| \urlstyle{$if(urlstyle)$$urlstyle$$else$same$endif$} | |
| $if(links-as-notes)$ | |
| % Make links footnotes instead of hotlinks: | |
| \DeclareRobustCommand{\href}[2]{#2\footnote{\url{#1}}} | |
| $endif$ | |
| $if(verbatim-in-note)$ | |
| \VerbatimFootnotes % allow verbatim text in footnotes | |
| $endif$ | |
| \hypersetup{ | |
| $if(title-meta)$ | |
| pdftitle={$title-meta$}, | |
| $endif$ | |
| $if(author-meta)$ | |
| pdfauthor={$author-meta$}, | |
| $endif$ | |
| $if(lang)$ | |
| pdflang={$lang$}, | |
| $endif$ | |
| $if(subject)$ | |
| pdfsubject={$subject$}, | |
| $endif$ | |
| $if(keywords)$ | |
| pdfkeywords={$for(keywords)$$keywords$$sep$, $endfor$}, | |
| $endif$ | |
| $if(colorlinks)$ | |
| colorlinks=true, | |
| linkcolor={$if(linkcolor)$$linkcolor$$else$Maroon$endif$}, | |
| filecolor={$if(filecolor)$$filecolor$$else$Maroon$endif$}, | |
| citecolor={$if(citecolor)$$citecolor$$else$Blue$endif$}, | |
| urlcolor={$if(urlcolor)$$urlcolor$$else$Blue$endif$}, | |
| $else$ | |
| $if(boxlinks)$ | |
| $else$ | |
| hidelinks, | |
| $endif$ | |
| $endif$ | |
| pdfcreator={LaTeX via pandoc}} | |
| $if(title)$ | |
| \title{$title$$if(thanks)$\thanks{$thanks$}$endif$} | |
| $endif$ | |
| $if(subtitle)$ | |
| $if(beamer)$ | |
| $else$ | |
| \usepackage{etoolbox} | |
| \makeatletter | |
| \providecommand{\subtitle}[1]{% add subtitle to \maketitle | |
| \apptocmd{\@title}{\par {\large #1 \par}}{}{} | |
| } | |
| \makeatother | |
| $endif$ | |
| \subtitle{$subtitle$} | |
| $endif$ | |
| \author{$for(author)$$author$$sep$ \and $endfor$} | |
| \date{$date$} | |
| $if(beamer)$ | |
| $if(institute)$ | |
| \institute{$for(institute)$$institute$$sep$ \and $endfor$} | |
| $endif$ | |
| $if(titlegraphic)$ | |
| \titlegraphic{\includegraphics{$titlegraphic$}} | |
| $endif$ | |
| $if(logo)$ | |
| \logo{\includegraphics{$logo$}} | |
| $endif$ | |
| $endif$ | |
| \begin{document} | |
| $if(has-frontmatter)$ | |
| \frontmatter | |
| $endif$ | |
| $if(title)$ | |
| $if(beamer)$ | |
| \frame{\titlepage} | |
| $else$ | |
| \maketitle | |
| $endif$ | |
| $if(abstract)$ | |
| \begin{abstract} | |
| $abstract$ | |
| \end{abstract} | |
| $endif$ | |
| $endif$ | |
| $for(include-before)$ | |
| $include-before$ | |
| $endfor$ | |
| $if(toc)$ | |
| $if(toc-title)$ | |
| \renewcommand*\contentsname{$toc-title$} | |
| $endif$ | |
| $if(beamer)$ | |
| \begin{frame}[allowframebreaks] | |
| $if(toc-title)$ | |
| \frametitle{$toc-title$} | |
| $endif$ | |
| \tableofcontents[hideallsubsections] | |
| \end{frame} | |
| $else$ | |
| { | |
| $if(colorlinks)$ | |
| \hypersetup{linkcolor=$if(toccolor)$$toccolor$$else$$endif$} | |
| $endif$ | |
| \setcounter{tocdepth}{$toc-depth$} | |
| \tableofcontents | |
| } | |
| $endif$ | |
| $endif$ | |
| $if(lof)$ | |
| \listoffigures | |
| $endif$ | |
| $if(lot)$ | |
| \listoftables | |
| $endif$ | |
| $if(linestretch)$ | |
| \setstretch{$linestretch$} | |
| $endif$ | |
| $if(has-frontmatter)$ | |
| \mainmatter | |
| $endif$ | |
| $body$ | |
| $if(has-frontmatter)$ | |
| \backmatter | |
| $endif$ | |
| $if(natbib)$ | |
| $if(bibliography)$ | |
| $if(biblio-title)$ | |
| $if(has-chapters)$ | |
| \renewcommand\bibname{$biblio-title$} | |
| $else$ | |
| \renewcommand\refname{$biblio-title$} | |
| $endif$ | |
| $endif$ | |
| $if(beamer)$ | |
| \begin{frame}[allowframebreaks]{$biblio-title$} | |
| \bibliographytrue | |
| $endif$ | |
| \bibliography{$for(bibliography)$$bibliography$$sep$,$endfor$} | |
| $if(beamer)$ | |
| \end{frame} | |
| $endif$ | |
| $endif$ | |
| $endif$ | |
| $if(biblatex)$ | |
| $if(beamer)$ | |
| \begin{frame}[allowframebreaks]{$biblio-title$} | |
| \bibliographytrue | |
| \printbibliography[heading=none] | |
| \end{frame} | |
| $else$ | |
| \printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$ | |
| $endif$ | |
| $endif$ | |
| $for(include-after)$ | |
| $include-after$ | |
| $endfor$ | |
| \end{document} |