Skip to content

Instantly share code, notes, and snippets.

@abtris
Created March 20, 2023 15:08
Show Gist options
  • Save abtris/a4a301be883ee532ed50559d38ff2385 to your computer and use it in GitHub Desktop.
Save abtris/a4a301be883ee532ed50559d38ff2385 to your computer and use it in GitHub Desktop.
Pandoc - Markdown to PDF

Make pandoc -> PDF

  • this solve default margins
  • wrapping code correcly

Instatructions

  • 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}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment