From 85206ec5e5f850940a95ff102e080ad74d5a2e62 Mon Sep 17 00:00:00 2001 From: Jeff Moe Date: Tue, 23 Aug 2022 12:15:31 -0600 Subject: [PATCH] SatNOGS Optical Unofficial Guide --- .gitignore | 21 + BUILD.md | 24 + Makefile | 11 + README.md | 14 + src/Colophon.tex | 29 + src/Contact.tex | 15 + src/Copyright.tex | 40 ++ src/Ground_Stations.tex | 16 + src/Introduction.tex | 14 + src/Makefile | 31 + src/SNOUG-thumbnail.tex | 21 + src/SNOUG.gst | 22 + src/SNOUG.ist | 16 + src/SNOUG.tex | 319 +++++++++ src/Satellites.tex | 16 + src/Title.tex | 27 + src/fvextra.sty | 1402 +++++++++++++++++++++++++++++++++++++ src/lmroman12-regular.otf | Bin 0 -> 110400 bytes 18 files changed, 2038 insertions(+) create mode 100644 .gitignore create mode 100644 BUILD.md create mode 100644 Makefile create mode 100644 README.md create mode 100644 src/Colophon.tex create mode 100644 src/Contact.tex create mode 100644 src/Copyright.tex create mode 100644 src/Ground_Stations.tex create mode 100644 src/Introduction.tex create mode 100644 src/Makefile create mode 100644 src/SNOUG-thumbnail.tex create mode 100644 src/SNOUG.gst create mode 100644 src/SNOUG.ist create mode 100644 src/SNOUG.tex create mode 100644 src/Satellites.tex create mode 100644 src/Title.tex create mode 100644 src/fvextra.sty create mode 100644 src/lmroman12-regular.otf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7454532 --- /dev/null +++ b/.gitignore @@ -0,0 +1,21 @@ +SNOH.pdf +*~ +.~lock.*.ods# +*.aux +.fuse_hidden* +*.glo +*.gls +*.idx +*.ilg +*.ind +*.lof +*.log +*.lol +_minted-* +*.old +*.out +*.pyg +*.swp +*.toc +*.xdv +*.zip diff --git a/BUILD.md b/BUILD.md new file mode 100644 index 0000000..88d8074 --- /dev/null +++ b/BUILD.md @@ -0,0 +1,24 @@ +# Dependencies + +* Requires LaTeX. + +* Minted syntax highlighting requires python-pygments to be installed. + +``` +apt install texlive-latex-recommended texlive-xetex python3-pygments +``` + + +# Build +Run the build script to make a PDF: + +``` +make +``` + +To clean: + +``` +make clean +``` + diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..001375f --- /dev/null +++ b/Makefile @@ -0,0 +1,11 @@ +# Makefile + +all: + $(MAKE) clean + $(MAKE) -C src + mv src/*.pdf . + +clean: + rm -f *.pdf + make clean -C src + diff --git a/README.md b/README.md new file mode 100644 index 0000000..ef70407 --- /dev/null +++ b/README.md @@ -0,0 +1,14 @@ +# SNOUG + +SatNOGS Optical Unofficial Guide + +by Jeff Moe + +Copyright 2022, Jeff Moe + +Permission is granted to copy, distribute and/or modify this document under +the terms of the Creative Commons Attribution 4.0 International Public License +(CC BY-SA 4.0). + +Published by Jeff Moe, Loveland, Colorado, USA. + diff --git a/src/Colophon.tex b/src/Colophon.tex new file mode 100644 index 0000000..1747292 --- /dev/null +++ b/src/Colophon.tex @@ -0,0 +1,29 @@ +% +% Colophon.tex +% +% SatNOGS Optical Unofficial Guide +% +% Copyright (C) 2022, Jeff Moe +% +% This document is licensed under the Creative Commons Attribution 4.0 +% International Public License (CC BY-SA 4.0) by Jeff Moe. +% + +%%% COLOPHON %%% +\begin{vplace} +\centering +\emph{\LARGE Colophon} + +\rule{0.5\textwidth}{0.4pt}\\[\baselineskip] + +{\tiny Created with 100\% Free Software} + +Debian GNU/Linux + +{\LaTeX} Memoir + +\rule{0\textwidth}{0pt}\\[\baselineskip]% +\rule{0.5\textwidth}{0.4pt}\\[\baselineskip] +\end{vplace} +%%% END COLOPHON %%% + diff --git a/src/Contact.tex b/src/Contact.tex new file mode 100644 index 0000000..8757a92 --- /dev/null +++ b/src/Contact.tex @@ -0,0 +1,15 @@ +% +% Contact.tex +% +% SatNOGS Optical Unofficial Guide +% +% Copyright (C) 2022, Jeff Moe +% +% This document is licensed under the Creative Commons Attribution 4.0 +% International Public License (CC BY-SA 4.0) by Jeff Moe. +% + +\section{Contact} +\setlength{\parindent}{0pt} +Email: \texttt{moe@spacecruft.org} + diff --git a/src/Copyright.tex b/src/Copyright.tex new file mode 100644 index 0000000..696004e --- /dev/null +++ b/src/Copyright.tex @@ -0,0 +1,40 @@ +% +% Copyright.tex +% Copyleft +% +% SatNOGS Optical Unofficial Guide +% +% Copyright (C) 2022, Jeff Moe +% +% This document is licensed under the Creative Commons Attribution 4.0 +% International Public License (CC BY-SA 4.0) by Jeff Moe. +% +\fontspec{lmroman12-regular.otf} + +\clearpage\null\vfill +\begingroup +\thispagestyle{empty} +\footnotesize\raggedright +\setlength{\parskip}{0.5\baselineskip} + +\textbf{SatNOGS Optical Unofficial Guide} + +by Jeff Moe + +Copyright \copyright\ 2022, Jeff Moe.\par +Permission is granted to copy, distribute and\slash or modify +this document under the terms of the +Creative Commons Attribution 4.0 International Public License +(CC BY-SA 4.0). + +Document layout/template:\par +Copyright \copyright\ 2022 Jeff Moe\par + +Published by Jeff Moe, Loveland, Colorado, USA. + +% ISBN: NNN-N-NNN-NNNNN-N +\renewcommand{\dateseparator}{} +\hfill\texttt{\yyyymmdddate\today} % Timestamp build date +\endgroup +\pagebreak{} + diff --git a/src/Ground_Stations.tex b/src/Ground_Stations.tex new file mode 100644 index 0000000..29b576b --- /dev/null +++ b/src/Ground_Stations.tex @@ -0,0 +1,16 @@ +% +% Ground Stations +% +% SatNOGS Optical Unofficial Guide +% +% Copyright (C) 2022, Jeff Moe +% +% This document is licensed under the Creative Commons Attribution 4.0 +% International Public License (CC BY-SA 4.0) by Jeff Moe. +% + +\section{Overview of Ground Stations} +\label{sec:overview-groundstations} + +Ground Stations. + diff --git a/src/Introduction.tex b/src/Introduction.tex new file mode 100644 index 0000000..0e27d00 --- /dev/null +++ b/src/Introduction.tex @@ -0,0 +1,14 @@ +% +% Introduction.tex +% +% SatNOGS Optical Unofficial Guide +% +% Copyright (C) 2022, Jeff Moe +% +% This document is licensed under the Creative Commons Attribution 4.0 +% International Public License (CC BY-SA 4.0) by Jeff Moe. +% + +\section{Introduction} +SatNOGS Optical Unofficial Guide. + diff --git a/src/Makefile b/src/Makefile new file mode 100644 index 0000000..affca64 --- /dev/null +++ b/src/Makefile @@ -0,0 +1,31 @@ +all: + xelatex \ + -halt-on-error \ + -shell-escape \ + -interaction=nonstopmode \ + -no-pdf \ + SNOUG.tex + xelatex \ + -halt-on-error \ + -shell-escape \ + -interaction=nonstopmode \ + -no-pdf \ + SNOUG.tex + xelatex \ + -halt-on-error \ + -shell-escape \ + -interaction=nonstopmode \ + SNOUG.tex + +clean: + rm -fr _minted-* + rm -f *.aux + rm -f *.glo + rm -f *.idx + rm -f *.lof + rm -f *.log + rm -f *.out + rm -f *.toc + rm -f *.xdv + rm -f *.pdf + diff --git a/src/SNOUG-thumbnail.tex b/src/SNOUG-thumbnail.tex new file mode 100644 index 0000000..a630ba3 --- /dev/null +++ b/src/SNOUG-thumbnail.tex @@ -0,0 +1,21 @@ +% +% SNOUG-thumbnail.tex +% Create thumbnail images of PDF pages +% +% SatNOGS Optical Unofficial Guide +% +% Copyright (C) 2022, Jeff Moe +% +% This document is licensed under the Creative Commons Attribution 4.0 +% International Public License (CC BY-SA 4.0) by Jeff Moe. +% + +\documentclass[twoside]{minimal} +\usepackage[paperwidth=22.86cm, paperheight=30.48cm,dvips=false,pdftex=false,vtex=false]{geometry} +\usepackage[final]{pdfpages} +\usepackage{pdflscape} +\usepackage{thumbpdf} +\begin{document} +\includepdf[nup=2x4,pages={{},-},landscape]{SNOUG.pdf} +\end{document} + diff --git a/src/SNOUG.gst b/src/SNOUG.gst new file mode 100644 index 0000000..6f3bb60 --- /dev/null +++ b/src/SNOUG.gst @@ -0,0 +1,22 @@ +% +% SNOUG.gst +% makindex glossary style file +% +% SatNOGS Optical Unofficial Guide +% +% Copyright (C) 2022, Jeff Moe +% +% This document is licensed under the Creative Commons Attribution 4.0 +% International Public License (CC BY-SA 4.0) by Jeff Moe. +% + +preamble "\\begin{theglossary}" +postamble "\n\\end{theglossary}\n" +item_0 "\n\\glossitem" +delim_0 "{\\memglonum{" +encap_suffix "}}}" +headings_flag 0 +heading_prefix "{" +heading_suffix "}" +keyword "\\glossaryentry" + diff --git a/src/SNOUG.ist b/src/SNOUG.ist new file mode 100644 index 0000000..754bee1 --- /dev/null +++ b/src/SNOUG.ist @@ -0,0 +1,16 @@ +% +% SNOUG.ist +% makindex index style file +% +% SatNOGS Optical Unofficial Guide +% +% Copyright (C) 2022, Jeff Moe +% +% This document is licensed under the Creative Commons Attribution 4.0 +% International Public License (CC BY-SA 4.0) by Jeff Moe. +% + +heading_prefix "{\\normalsize \\bfseries\\hfil\\ " +heading_suffix " \\ \\hfil}\\nopagebreak\n" +headings_flag 1 + diff --git a/src/SNOUG.tex b/src/SNOUG.tex new file mode 100644 index 0000000..355933e --- /dev/null +++ b/src/SNOUG.tex @@ -0,0 +1,319 @@ +% +% SNOUG.tex +% Main LaTeX document for formatting SNOUG +% +% SatNOGS Optical Unofficial Guide +% +% Copyright (C) 2022, Jeff Moe +% +% Previous versions of this LaTeX template (with different content): +% Copyright (C) 2017, Jeff Moe +% Copyright (C) 2011, 2012, 2013, 2014, 2015, 2016, 2017 Aleph Objects, Inc. +% Copyright (C) 2009, 2010 Jeff Moe +% +% This document is licensed under the Creative Commons Attribution 4.0 +% International Public License (CC BY-SA 4.0) by Jeff Moe. +% + +%%% XXX NOTE +%%% Glossaries and indices are broken: +%%% https://sharelatex.tenderapp.com/help/discussions/questions/19378-glossaries-indices-and-speed +%%% XXX NOTE + +% LaTeX Docs: +% http://en.wikibooks.org/wiki/Category:LaTeX + +% LaTeX Memoir Class +% Docs: /usr/share/doc/texlive-latex-recommended-doc/latex/memoir/memman.pdf +\documentclass[twoside,10pt,openright,final,english]{memoir} + +\usepackage{tikz} +\usetikzlibrary{shadows,shapes,arrows,chains,calc,decorations.pathmorphing,patterns,trees,positioning,automata,fit} +% This breaks things, but would be great to use +%\usepackage{tikz-qtree,tikz-qtree-compat} +\usepackage{rotating} +\usepackage{forest} + +\usetikzlibrary{arrows,shapes} +\usetikzlibrary{positioning,calendar,er} +\usetikzlibrary{decorations.markings} +\usetikzlibrary{shapes.geometric} + +% Source code highlighting +\usepackage{mdframed} % /usr/share/doc/texlive-doc/latex/mdframed/mdframed.pdf +\usepackage{minted} % /usr/share/doc/texlive-doc/latex/minted/minted.pdf +\setminted{autogobble, breaklines, breakanywhere, breakautoindent, funcnamehighlighting,style=manni,fontsize=\scriptsize} +% fontsize +\setmintedinline{breaklines, breakanywhere} +\surroundwithmdframed{minted} +\mdfsetup{roundcorner=10pt, +linewidth=3pt, +linecolor=jebba-light-blue, +backgroundcolor=white, +leftmargin=1cm,rightmargin=1cm +} + +\usepackage{smartdiagram} +\usesmartdiagramlibrary{additions} +\usepackage{comment} % /usr/share/doc/texlive-doc/latex/comment/comment.pdf +\usepackage{graphicx} % /usr/share/doc/texlive-doc/latex/graphics/graphicx.pdf +\usepackage{epstopdf} % /usr/share/doc/texlive-doc/latex/oberdiek/epstopdf.pdf +% http://www.tug.org/applications/hyperref/manual.html +% /usr/share/doc/texlive-doc/latex/hyperref/hyperref.pdf +\usepackage[colorlinks=true,linkcolor=jebba-dark-orange,urlcolor=jebba-dark-orange]{hyperref} +%\usepackage{url} % /usr/share/doc/texlive-doc/latex/url/url.pdf % Use hyperref. +\graphicspath{{./resources/}} + +\makeindex +\makeglossary + +\usepackage{color} % Docs: /usr/share/doc/texlive-latex-base-doc/latex/graphics/grfguide.pdf +%\usepackage[usenames,dvipsnames,svgnames,table]{xcolor} + +%%% PREAMBLE FONTS %%% +% For XeTeX +% http://www.ctan.org/pkg/fontspec +% http://mirrors.ctan.org/macros/latex/contrib/fontspec/fontspec.pdf +\usepackage{fontspec} +\defaultfontfeatures{Ligatures=TeX} % To support LaTeX quoting style +\setmainfont{lmroman12-regular.otf} + +\usepackage[normalem]{ulem} % underline + +\usepackage{floatpag} % Full page figures without page numbers. + +%%% END PREAMBLE FONTS %%% + +%%% PAGE, STOCK, AND MARGIN SIZE %%% +% 7.44 x 9.68" 18.90 x 24.58cm +% "Crown Quarto/Crown 4vo" at Lulu and Lightning Source +\setstocksize{24.58cm}{18.90cm} % { height }{ width } +\settrimmedsize{\stockheight}{\stockwidth}{*} + +%\settypeblocksize{ height }{ width }{ ratio } +\settypeblocksize{19.0cm}{*}{*} + +%\setlrmarginsandblock{ spine }{ edge }{ ratio } +% make the spine have more space than outer edge +\setlrmarginsandblock{*}{2.5cm}{1.2} + +% \setulmargins{ upper }{ lower }{ ratio } +\setulmargins{2.0cm}{*}{*} + +% \setheadfoot{ headheight }{ footskip } +\setheadfoot{12pt}{2cm} + +\checkandfixthelayout[fixed] +%%% END PAGE, STOCK, AND MARGIN SIZE %%% + +\setcounter{secnumdepth}{3} +\setcounter{tocdepth}{3} +\setsecnumdepth{subsection} + +\usepackage[english]{babel} +\usepackage{datetime} % Docs: /usr/share/doc/texlive-doc/latex/datetime/datetime.pdf +\usepackage{ucs} + +%%% PDFLATEX %%% +\usepackage{etex} + +%%% Not all features are used in XeTeX +\usepackage[protrusion,babel,final]{microtype} +%%% Conflicts with package fontspec +%\usepackage[utf8x]{inputenc} + +% Docs: /usr/share/doc/texlive-humanities-doc/latex/ledmac/ledmac.pdf +%\usepackage{eledmac} + +%%% SNOUG PAGE STYLE %%% +\makepagestyle{jebbastyle} +\pagestyle{jebbastyle} +\makeevenhead{jebbastyle}{}{\hspace{2em}\itshape\small\leftmark}{} +\makeoddhead{jebbastyle}{}{\scshape\small\rightmark}{} +\makeevenfoot{jebbastyle}{}{\hspace{2em}\thepage}{} +\makeoddfoot{jebbastyle}{}{\thepage}{} +%%% END SNOUG PAGE STYLE %%% + +%%% SNOUGSKI CHAPTER STYLE %%% +\makechapterstyle{jebbaski}{% + \renewcommand*{\printchaptername}{} % Clear out the chapter name (e.g. capĂ­tulo) + \renewcommand*{\printchapternum}{} % Clear out the chapter number + \renewcommand*{\chaptitlefont}{\fontspec{lmroman12-regular.otf}\fontsize{20pt}{3em}\selectfont} % Set chapter title font + \renewcommand*{\printchaptertitle}[1]{% + \hrule\vskip\onelineskip \centering \chaptitlefont{##1}\par} + % Set chapter title font + \renewcommand*{\afterchaptertitle}{\vskip\onelineskip \hrule\vskip + \afterchapskip} +} +%%% END SNOUGSKI CHAPTER STYLE %%% + +%%% FORMATTING... %%% +\midsloppy +\setlength{\emergencystretch}{3em} +\tolerance=5000 +\hyphenpenalty=500 +\setlength{\topskip}{1.6\topskip} +\checkandfixthelayout +\raggedbottom +\widowpenalty=10000 +\clubpenalty=10000 +%%% END FORMATTING... %%% + +%%% FOOTNOTES %%% +% no horizontal rule before footnotes: +\let\oldfootnoterule\footnoterule +\renewcommand*{\footnoterule}{} +\setlength{\footmarkwidth}{3.5em} +%%% END FOOTNOTES %%% + +%%% COLORS %%% +\definecolor{jebba-purple}{cmyk}{0.40,0.70,0.00,0.43} % ??? +%\definecolor{jebba-purple}{cmyk}{0.84 0.80 0.00 0.04} % ??? +\definecolor{jebba-dark-blue}{cmyk}{0.83 0.24 0.00 0.22} +\definecolor{jebba-light-blue}{cmyk}{0.42 0.24 0.00 0.08} +\definecolor{jebba-light-orange}{cmyk}{0.00 0.40 0.88 0.03} +\definecolor{jebba-dark-orange}{cmyk}{0.00 0.42 0.83 0.22} +\definecolor{jebba-gold}{cmyk}{0.00 0.28 0.74 0.00} +\definecolor{jebba-greyblack}{cmyk}{0.00 0.22 0.08 0.87} +\definecolor{jebba-white}{cmyk}{0.00 0.00 0.00 0.00} +\definecolor{jebba-black}{cmyk}{1.00 1.00 1.00 1.00} +\definecolor{jebba-green}{cmyk}{0.22 0.00 0.78 0.24} +%%% END COLORS %%% + + +%%% DEBUG %%% +%\showoutput +%\typeoutlayout +%\typeoutstandardlayout +%%% END DEBUG %%% + +%%% END OF PREAMBLE %%% + +\begin{document} + +%%% BEGIN FRONT MATTER %%% +\frontmatter + +% Set page numbers to lowercase roman numerals, and reset the count to 1 (no *) +\pagenumbering{roman} + +%%% TITLE PAGE %%% +% We want the title to be on the right hand page. +% If we pad a page, it gives us two with openright +\include{Title} +%%% END TITLE PAGE + +%%% COPYRIGHT PAGE %%% +\include{Copyright} +%%% END COPYRIGHT PAGE %%% + +%%% TABLE OF CONTENTS %%% +{\fontspec{lmroman12-regular.otf} +\maxtocdepth{subsection} +\settocdepth{subsection} +%\setsecnumdepth{subsection} +% space between dots +\renewcommand{\cftchapterdotsep}{15} +% dot symbol (default is period) +\renewcommand{\cftdot}{\textperiodcentered} % centered period +% Set space between each entry in ToC +\setlength{\cftbeforechapterskip}{5pt} +\tableofcontents*} +%%% END TABLE OF CONTENTS %%% + +%%% LIST OF FIGURES %%% +\renewcommand*{\lofheadstart}{\vspace{1cm}} +\clearpage +\listoffigures* +%%% END LIST OF FIGURES %%% + +%%% LIST OF LISTINGS %%% +%\renewcommand*{\lofheadstart}{\vspace{1cm}} +%\clearpage +%\listoflistings +%%% END LIST OF LISTINGS %%% + +%%% CHAPTER STYLE %%% +\chapterstyle{jebbaski} % defined in preamble +\def\topblockvspace{0.11} +%%% END CHAPTER STYLE %%% + +%%% CHAPTER CONFIG %%% +\newcommand{\chapterheader}{SatNOGS Optical Unofficial Guide} +% See \chapterconf below for examples of how this is used. +% value 1 is file to include +% value 2 is title of chapter +% value 3 is sub title of chapter +\newcommand{\chapterconf}[3]{ +\chapter{\emph{{#2}}\protect \\ +{#3}} +\thispagestyle{empty} +\markboth{#2}{\chapterheader} +{\include{#1}} +} +%%% END CHAPTER CONFIG %%% + +%%% FRONTMATTER CHAPTERS %%% +\fontspec{lmroman12-regular.otf} + +% Format: +% \chapterconf{Name of file to include}{Title of Chapter} +\chapterconf{Introduction}{Introduction}{SatNOGS Optical Unofficial Guide} +%%% END FRONTMATTER CHAPTERS %%% + +%%% END FRONTMATTER %%% + +%%% BEGIN MAINMATTER %%% +\mainmatter* + +% Set page numbering to arabic, but don't reset numbering (*) +\pagenumbering*{arabic} + +%% MAINMATTER CHAPTERS %%% +% Default chapter font +\fontspec{lmroman12-regular.otf} + +% Format: +% \chapterconf{Name of file to include}{Title of Chapter}{Subtitle} +% Comment out a line to not render that chapter +\chapterconf{Satellites}{Satellites}{Artificial Satellites} +\chapterconf{Ground_Stations}{Ground Stations}{Earth Ground Stations} +\chapterconf{Contact}{Contact}{Email} +%% END MAINMATTER CHAPTERS %%% + +%%% END MAINMATTER %%% + +%%% BEGIN BACKMATTER %%% +\backmatter + +%%% INDEX %%% +\clearpage +\printindex +%%% END INDEX %%% + +%%% GLOSSARY %%% +\renewcommand{\memgloterm}[1]{\textbf{#1}} +\renewcommand{\memglodesc}[1]{\textit{#1}} +\renewcommand{\memglonum}[1]{} + +\clearpage +\printglossary +%%% END GLOSSARY %%% + +%%% COLOPHON %%% +%%% skip a couple pages +\pagebreak{} +\thispagestyle{empty} +\begingroup +\vfill\null +\endgroup +\pagebreak{} +\thispagestyle{empty} +\fontspec{lmroman12-regular.otf} +{\include{Colophon}} +%%% END COLOPHON %%% + +%%% END BACKMATTER %%% + +\end{document} + diff --git a/src/Satellites.tex b/src/Satellites.tex new file mode 100644 index 0000000..a019799 --- /dev/null +++ b/src/Satellites.tex @@ -0,0 +1,16 @@ +% +% Satellites +% +% SatNOGS Optical Unofficial Guide +% +% Copyright (C) 2022, Jeff Moe +% +% This document is licensed under the Creative Commons Attribution 4.0 +% International Public License (CC BY-SA 4.0) by Jeff Moe. +% + +\section{Overview of Satellites} +\label{sec:overview-satellites} + +Artificial satellites are rocks with modems. + diff --git a/src/Title.tex b/src/Title.tex new file mode 100644 index 0000000..0bd4855 --- /dev/null +++ b/src/Title.tex @@ -0,0 +1,27 @@ +% +% Title.tex +% +% SatNOGS Optical Unofficial Guide +% +% Copyright (C) 2022, Jeff Moe +% +% This document is licensed under the Creative Commons Attribution 4.0 +% International Public License (CC BY-SA 4.0) by Jeff Moe. +% + +\date {} +\thispagestyle{empty} +\begin{center} +\par +%\includegraphics[keepaspectratio=true,angle=0,height=0.95\textheight,width=0.95\textwidth]{ai-title.pdf} +\par +\null\vfill +{\fontspec{lmroman12-regular.otf}\fontsize{25pt}{5cm}\selectfont \textcolor{jebba-purple}{SatNOGS Optical Unofficial Guide}} + + +\par +\null\vfill +\renewcommand{\dateseparator}{} +\hfill\texttt{\yyyymmdddate\today} % Timestamp build date +\end{center} + diff --git a/src/fvextra.sty b/src/fvextra.sty new file mode 100644 index 0000000..45d418d --- /dev/null +++ b/src/fvextra.sty @@ -0,0 +1,1402 @@ +%% +%% 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 by Geoffrey M. Poore +%% -------------------------------------------------------------------------- +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +\NeedsTeXFormat{LaTeX2e}[1999/12/01] +\ProvidesPackage{fvextra} + [2016/09/02 v1.2.1 fvextra - extensions and patches for fancyvrb] +\RequirePackage{ifthen} +\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@Space@ifx{\FV@Space} +\def\FV@Tab@ifx{\FV@Tab} +\let\FV@FormattingPrepHook\@empty +\expandafter\def\expandafter\FV@FormattingPrep\expandafter{% + \expandafter\FV@FormattingPrepHook\FV@FormattingPrep} +\let\FV@PygmentsHook\relax +\g@addto@macro\FV@FormattingPrepHook{\FV@PygmentsHook} +\edef\FV@hashchar{\string#} +\edef\FV@dollarchar{\string$} +\edef\FV@ampchar{\string&} +\edef\FV@underscorechar{\string_} +\edef\FV@tildechar{\string~} +\edef\FV@leftsquarebracket{\string[} +\edef\FV@rightsquarebracket{\string]} +\newcommand{\FV@EscChars}{% + \let\#\FV@hashchar + \let\%\@percentchar + \let\{\@charlb + \let\}\@charrb + \let\$\FV@dollarchar + \let\&\FV@ampchar + \let\_\FV@underscorechar + \let\\\@backslashchar + \let~\FV@tildechar + \let\~\FV@tildechar + \let\[\FV@leftsquarebracket + \let\]\FV@rightsquarebracket +} %$ <- highlighting +\def\FancyVerbSpace{\textvisiblespace} +\newcounter{FV@TrueTabGroupLevel} +\def\FV@@ObeyTabs#1{% + \let\FV@Space@Orig\FV@Space + \let\FV@Space\FV@Space@ObeyTabs + \setcounter{FV@TrueTabGroupLevel}{\the\currentgrouplevel}% + \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}} +\newboolean{FV@ObeyTabs@Whitespace@Tab} +\def\FV@TrueTab@Group{% + \booltrue{FV@ObeyTabs@Whitespace@Tab}% + \gdef\FV@TmpWhitespace{\FV@Tab@ifx}% + \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@Space@ifx}% + \FV@ObeyTabs@ScanWhitespace} +\def\FV@ObeyTabs@ScanWhitespace{% + \@ifnextchar\FV@Space@ifx% + {\FV@TrueTab@CaptureWhitespace@Space}% + {\ifx\@let@token\FV@Tab@ifx + \expandafter\FV@TrueTab@CaptureWhitespace@Tab + \else + \expandafter\FV@ObeyTabs@ResolveWhitespace + \fi}} +\def\FV@TrueTab@CaptureWhitespace@Space#1{% + \g@addto@macro\FV@TmpWhitespace{\FV@Space@ifx}% + \FV@ObeyTabs@ScanWhitespace} +\def\FV@TrueTab@CaptureWhitespace@Tab#1{% + \booltrue{FV@ObeyTabs@Whitespace@Tab}% + \g@addto@macro\FV@TmpWhitespace{\FV@Tab@ifx}% + \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@FormattingPrepHook{\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@FormattingPrepHook{\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@FormattingPrepHook{\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} +\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@FormattingPrepHook{\FancyVerbCurlyQuotes} +\fvset{curlyquotes=false} +\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}}} +\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@FormattingPrepHook{\FV@HighlightLinesPrep} +\newboolean{FV@BreakLines} +\define@booleankey{FV}{breaklines}% + {\FV@BreakLinestrue + \let\FV@ListProcessLine\FV@ListProcessLine@Break}% + {\FV@BreakLinesfalse + \let\FV@ListProcessLine\FV@ListProcessLine@NoBreak} +\AtEndOfPackage{\fvset{breaklines=false}} +\newdimen\FV@BreakIndent +\define@key{FV}{breakindent}{\FV@BreakIndent=#1\relax} +\fvset{breakindent=0pt} +\newboolean{FV@BreakAutoIndent} +\define@booleankey{FV}{breakautoindent}% + {\FV@BreakAutoIndenttrue}{\FV@BreakAutoIndentfalse} +\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 +\define@key{FV}{breaksymbolsepleft}{\FV@BreakSymbolSepLeft=#1\relax} +\define@key{FV}{breaksymbolsep}{\fvset{breaksymbolsepleft=#1}} +\fvset{breaksymbolsepleft=1em} +\newdimen\FV@BreakSymbolSepRight +\define@key{FV}{breaksymbolsepright}{\FV@BreakSymbolSepRight=#1\relax} +\fvset{breaksymbolsepright=1em} +\newdimen\FV@BreakSymbolIndentLeft +\settowidth{\FV@BreakSymbolIndentLeft}{\ttfamily xxxx} +\define@key{FV}{breaksymbolindentleft}{\FV@BreakSymbolIndentLeft=#1\relax} +\define@key{FV}{breaksymbolindent}{\fvset{breaksymbolindentleft=#1}} +\newdimen\FV@BreakSymbolIndentRight +\settowidth{\FV@BreakSymbolIndentRight}{\ttfamily xxxx} +\define@key{FV}{breaksymbolindentright}{\FV@BreakSymbolIndentRight=#1\relax} +\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@Token\relax +\newboolean{FV@BreakAnywhere} +\define@booleankey{FV}{breakanywhere}% + {\FV@BreakAnywheretrue + \let\FancyVerbBreakStart\FV@Break + \let\FancyVerbBreakStop\FV@EndBreak + \let\FV@Break@Token\FV@Break@AnyToken}% + {\FV@BreakAnywherefalse + \let\FancyVerbBreakStart\relax + \let\FancyVerbBreakStop\relax} +\fvset{breakanywhere=false} +\define@key{FV}{breakbefore}{% + \ifstrempty{#1}% + {\let\FV@BreakBefore\@empty + \let\FancyVerbBreakStart\relax + \let\FancyVerbBreakStop\relax}% + {\def\FV@BreakBefore{#1}% + \let\FancyVerbBreakStart\FV@Break + \let\FancyVerbBreakStop\FV@EndBreak + \let\FV@Break@Token\FV@Break@BeforeAfterToken}% +} +\fvset{breakbefore={}} +\newboolean{FV@BreakBeforeGroup} +\define@booleankey{FV}{breakbeforegroup}% + {\FV@BreakBeforeGrouptrue}% + {\FV@BreakBeforeGroupfalse}% +\fvset{breakbeforegroup=true} +\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}% + {\def\FV@BreakAfter{#1}% + \let\FancyVerbBreakStart\FV@Break + \let\FancyVerbBreakStop\FV@EndBreak + \let\FV@Break@Token\FV@Break@BeforeAfterToken}% +} +\fvset{breakafter={}} +\newboolean{FV@BreakAfterGroup} +\define@booleankey{FV}{breakaftergroup}% + {\FV@BreakAfterGrouptrue}% + {\FV@BreakAfterGroupfalse}% +\fvset{breakaftergroup=true} +\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 + \ifthenelse{\boolean{FV@BreakBeforeGroup}}% + {\ifthenelse{\boolean{FV@BreakAfterGroup}}% + {}% + {\PackageError{fvextra}% + {Conflicting breakbeforegroup and breakaftergroup for "\detokenize{##1}"}% + {Conflicting breakbeforegroup and breakaftergroup for "\detokenize{##1}"}}}% + {\ifthenelse{\boolean{FV@BreakAfterGroup}}% + {\PackageError{fvextra}% + {Conflicting breakbeforegroup and breakaftergroup for "\detokenize{##1}"}% + {Conflicting breakbeforegroup and breakaftergroup 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@FormattingPrepHook{% + \ifcsname pdfmatch\endcsname + \ifx\pdfmatch\relax + \else + \ifcsname inputencodingname\endcsname + \ifx\inputencodingname\relax + \else + \ifdefstring{\inputencodingname}{utf8}% + {\let\FV@BreakBeforePrep\FV@BreakBeforePrep@UTF + \let\FV@BreakAfterPrep\FV@BreakAfterPrep@UTF}% + {}% + \fi\fi + \fi\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}{}} +\newsavebox{\FV@LineBox} +\newsavebox{\FV@LineIndentBox} +\let\FV@LineIndentChars\@empty +\def\FV@CleanRemainingChars#1\FV@Undefined{} +\def\FV@GetLineIndent{\afterassignment\FV@CheckIndentChar\let\FV@NextChar=} +\def\FV@CheckIndentChar{% + \ifx\FV@NextChar\FV@Undefined\relax + \let\FV@Next=\relax + \else + \ifx\FV@NextChar\FV@Space@ifx\relax + \g@addto@macro{\FV@LineIndentChars}{\FV@Space@ifx}% + \let\FV@Next=\FV@GetLineIndent + \else + \ifx\FV@NextChar\FV@Tab@ifx\relax + \g@addto@macro{\FV@LineIndentChars}{\FV@Tab@ifx}% + \let\FV@Next=\FV@GetLineIndent + \else + \let\FV@Next=\FV@CleanRemainingChars + \fi + \fi + \fi + \FV@Next +} +\def\FV@TrueTab@UseWidth{% + \@tempdima=\csname FV@TrueTab:Width\arabic{FV@TrueTabCounter}\endcsname sp\relax + \stepcounter{FV@TrueTabCounter}% + \hbox to\@tempdima{\hss\FV@TabChar}} +\def\FV@Break{% + \def\FV@TmpLine{}% + \let\FV@LastToken=\FV@Undefined + \ifcsname pdfmatch\endcsname + \ifx\pdfmatch\relax + \else + \ifcsname inputencodingname\endcsname + \ifx\inputencodingname\relax + \else + \ifdefstring{\inputencodingname}{utf8}% + {\ifx\FV@Break@Token\FV@Break@AnyToken + \let\FV@Break@Token\FV@Break@AnyToken@UTF + \else + \ifx\FV@Break@Token\FV@Break@BeforeAfterToken + \let\FV@Break@Token\FV@Break@BeforeAfterToken@UTF + \fi + \fi}% + {}% + \fi\fi + \fi\fi + \FV@Break@Scan +} +\def\FV@EndBreak{\FV@TmpLine} +\begingroup +\catcode`\$=3% +\gdef\FV@Break@Scan{% + \@ifnextchar\FV@EndBreak% + {}% + {\ifx\@let@token$\relax + \let\FV@Break@Next\FV@Break@Math + \else + \ifx\@let@token\bgroup\relax + \let\FV@Break@Next\FV@Break@Group + \else + \let\FV@Break@Next\FV@Break@Token + \fi + \fi + \FV@Break@Next}% +} +\endgroup +\begingroup +\catcode`\$=3% +\gdef\FV@Break@Math$#1${% + \g@addto@macro{\FV@TmpLine}{$#1$}% + \let\FV@LastToken=\FV@Undefined + \FV@Break@Scan} +\endgroup +\def\FV@Break@Group#1{% + \g@addto@macro{\FV@TmpLine}{{#1}}% + \ifstrempty{#1}{}{\let\FV@LastToken=\FV@Undefined}% + \FV@Break@Scan} +\def\FV@Break@AnyToken#1{% + \g@addto@macro{\FV@TmpLine}{\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{% + \g@addto@macro{\FV@TmpLine}{#1}% + \let\FV@LastToken=#1% + \FV@Break@Scan} +\def\FV@Break@BeforeTokenBreak#1{% + \ifthenelse{\boolean{FV@BreakBeforeGroup}}% + {\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 + \g@addto@macro{\FV@TmpLine}{#1}% + \let\FV@Break@Next\FV@Break@Scan + \let\FV@LastToken=#1% + \fi + \else + \ifcsname FV@BreakAfter@Token\detokenize{#1}\endcsname + \g@addto@macro{\FV@TmpLine}{\FancyVerbBreakBeforeBreak}% + \let\FV@Break@Next\FV@Break@BeforeTokenBreak@AfterRescan + \def\FV@RescanToken{#1}% + \else + \g@addto@macro{\FV@TmpLine}{\FancyVerbBreakBeforeBreak#1}% + \let\FV@Break@Next\FV@Break@Scan + \let\FV@LastToken=#1% + \fi + \fi}% + {\ifcsname FV@BreakAfter@Token\detokenize{#1}\endcsname + \g@addto@macro{\FV@TmpLine}{\FancyVerbBreakBeforeBreak}% + \let\FV@Break@Next\FV@Break@BeforeTokenBreak@AfterRescan + \def\FV@RescanToken{#1}% + \else + \g@addto@macro{\FV@TmpLine}{\FancyVerbBreakBeforeBreak#1}% + \let\FV@Break@Next\FV@Break@Scan + \let\FV@LastToken=#1% + \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@Space@ifx% + {\g@addto@macro{\FV@TmpLine}{#1}\FV@Break@Scan}% + {\ifthenelse{\boolean{FV@BreakAfterGroup}}% + {\ifx\@let@token#1\relax + \g@addto@macro{\FV@TmpLine}{#1}% + \let\FV@Break@Next\FV@Break@Scan + \else + \ifx\@let@token\bgroup\relax + \g@addto@macro{\FV@TmpLine}{#1}% + \let\FV@Break@Next\FV@Break@AfterTokenBreak@Group + \else + \g@addto@macro{\FV@TmpLine}{#1\FancyVerbBreakAfterBreak}% + \let\FV@Break@Next\FV@Break@Scan + \fi + \fi}% + {\g@addto@macro{\FV@TmpLine}{#1\FancyVerbBreakAfterBreak}% + \let\FV@Break@Next\FV@Break@Scan}% + \FV@Break@Next}% +} +\def\FV@Break@AfterTokenBreak@Group#1{% + \g@addto@macro{\FV@TmpLine}{{#1}}% + \ifstrempty{#1}% + {\let\FV@Break@Next\FV@Break@AfterTokenBreak@Group@i}% + {\let\FV@Break@Next\FV@Break@Scan\let\FV@LastToken=\FV@Undefined}% + \FV@Break@Next} +\def\FV@Break@AfterTokenBreak@Group@i{% + \@ifnextchar\FV@LastToken% + {\FV@Break@Scan}% + {\g@addto@macro{\FV@TmpLine}{\FancyVerbBreakAfterBreak}% + \FV@Break@Scan}} +\ifcsname pdfmatch\endcsname +\ifx\pdfmatch\relax +\else +\def\FV@UTF@two@octets#1#2{% + \ifcsname u8:\detokenize{#1#2}\endcsname + \else + #1#2% + \fi + \FV@Break@NextNext{#1#2}} +\def\FV@UTF@three@octets#1#2#3{% + \ifcsname u8:\detokenize{#1#2#3}\endcsname + \else + #1#2#3% + \fi + \FV@Break@NextNext{#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@Break@NextNext{#1#2#3#4}} +\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@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@Break@NextNext\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@Break@NextNext\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 + \ifthenelse{\boolean{FV@BreakBeforeGroup}}% + {\ifthenelse{\boolean{FV@BreakAfterGroup}}% + {}% + {\PackageError{fvextra}% + {Conflicting breakbeforegroup and breakaftergroup for "\detokenize{##1}"}% + {Conflicting breakbeforegroup and breakaftergroup for "\detokenize{##1}"}}}% + {\ifthenelse{\boolean{FV@BreakAfterGroup}}% + {\PackageError{fvextra}% + {Conflicting breakbeforegroup and breakaftergroup for "\detokenize{##1}"}% + {Conflicting breakbeforegroup and breakaftergroup 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@Break@NextNext\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{% + \g@addto@macro{\FV@TmpLine}{\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@Break@NextNext\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{% + \g@addto@macro{\FV@TmpLine}{#1}% + \def\FV@LastToken{#1}% + \FV@Break@Scan} +\def\FV@Break@BeforeTokenBreak@UTF#1{% + \def\FV@CurrentToken{#1}% + \ifthenelse{\boolean{FV@BreakBeforeGroup}}% + {\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 + \g@addto@macro{\FV@TmpLine}{#1}% + \let\FV@Break@Next\FV@Break@Scan + \def\FV@LastToken{#1}% + \fi + \else + \ifcsname FV@BreakAfter@Token\detokenize{#1}\endcsname + \g@addto@macro{\FV@TmpLine}{\FancyVerbBreakBeforeBreak}% + \let\FV@Break@Next\FV@Break@BeforeTokenBreak@AfterRescan@UTF + \def\FV@RescanToken{#1}% + \else + \g@addto@macro{\FV@TmpLine}{\FancyVerbBreakBeforeBreak#1}% + \let\FV@Break@Next\FV@Break@Scan + \def\FV@LastToken{#1}% + \fi + \fi}% + {\ifcsname FV@BreakAfter@Token\detokenize{#1}\endcsname + \g@addto@macro{\FV@TmpLine}{\FancyVerbBreakBeforeBreak}% + \let\FV@Break@Next\FV@Break@BeforeTokenBreak@AfterRescan@UTF + \def\FV@RescanToken{#1}% + \else + \g@addto@macro{\FV@TmpLine}{\FancyVerbBreakBeforeBreak#1}% + \let\FV@Break@Next\FV@Break@Scan + \def\FV@LastToken{#1}% + \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@Space@ifx% + {\g@addto@macro{\FV@TmpLine}{#1}\FV@Break@Scan}% + {\ifthenelse{\boolean{FV@BreakAfterGroup}}% + {\g@addto@macro{\FV@TmpLine}{#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}% + {\g@addto@macro{\FV@TmpLine}{#1\FancyVerbBreakAfterBreak}% + \let\FV@Break@Next\FV@Break@Scan}% + \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@Break@NextNext\FV@Break@AfterTokenBreak@UTF@i + \else + \def\FV@NextToken{#1}% + \ifx\FV@LastToken\FV@NextToken + \else + \g@addto@macro{\FV@TmpLine}{\FancyVerbBreakAfterBreak}% + \fi + \let\FV@Break@Next\FV@Break@Scan + \fi + \FV@Break@Next#1} +\def\FV@Break@AfterTokenBreak@Group@UTF#1{% + \g@addto@macro{\FV@TmpLine}{{#1}}% + \ifstrempty{#1}% + {\let\FV@Break@Next\FV@Break@AfterTokenBreak@Group@UTF@i}% + {\let\FV@Break@Next\FV@Break@Scan\let\FV@LastToken=\FV@Undefined}% + \FV@Break@Next} +\def\FV@Break@AfterTokenBreak@Group@UTF@i{% + \@ifnextchar\bgroup% + {\FV@Break@Scan}% + {\FV@Break@AfterTokenBreak@Group@UTF@ii}} +\def\FV@Break@AfterTokenBreak@Group@UTF@ii#1{% + \ifcsname FV@U8:\detokenize{#1}\endcsname + \expandafter\let\expandafter\FV@Break@Next\csname FV@U8:\detokenize{#1}\endcsname + \let\FV@Break@NextNext\FV@Break@AfterTokenBreak@Group@UTF@ii + \else + \def\FV@NextToken{#1}% + \ifx\FV@LastToken\FV@NextToken + \else + \g@addto@macro{\FV@TmpLine}{\FancyVerbBreakAfterBreak}% + \fi + \let\FV@Break@Next\FV@Break@Scan + \fi + \FV@Break@Next#1} +\fi\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@} +\def\FV@SaveLineBox#1{% + \savebox{\FV@LineBox}{% + \advance\linewidth by -\FV@BreakIndent + \hbox to \FV@BreakIndent{\hfill}% + \ifthenelse{\boolean{FV@BreakAutoIndent}}% + {\let\FV@LineIndentChars\@empty + \FV@GetLineIndent#1\FV@Undefined + \savebox{\FV@LineIndentBox}{\FV@LineIndentChars}% + \hbox to \wd\FV@LineIndentBox{\hfill}% + \advance\linewidth by -\wd\FV@LineIndentBox + \setcounter{FV@TrueTabCounter}{0}}% + {}% + \ifdefempty{\FancyVerbBreakSymbolLeft}{}% + {\hbox to \FV@BreakSymbolIndentLeft{\hfill}% + \advance\linewidth by -\FV@BreakSymbolIndentLeft}% + \ifdefempty{\FancyVerbBreakSymbolRight}{}% + {\advance\linewidth by -\FV@BreakSymbolIndentRight}% + \parbox[t]{\linewidth}{% + \FV@RaggedRight + \leftlinenumbers* + \begin{internallinenumbers*}% + \let\makeLineNumber\FV@makeLineNumber + \noindent\hspace*{-\FV@BreakIndent}% + \ifdefempty{\FancyVerbBreakSymbolLeft}{}{% + \hspace*{-\FV@BreakSymbolIndentLeft}}% + \ifthenelse{\boolean{FV@BreakAutoIndent}}% + {\hspace*{-\wd\FV@LineIndentBox}}% + {}% + \FV@BreakByTokenAnywhereHook + \strut\FancyVerbFormatText{% + \FancyVerbBreakStart #1\FancyVerbBreakStop}\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{% + \ifx\FV@RightListFrame\relax\else + \advance\linewidth by -\FV@FrameSep + \advance\linewidth by -\FV@FrameRule + \fi + \ifx\FV@LeftListFrame\relax\else + \advance\linewidth by -\FV@FrameSep + \advance\linewidth by -\FV@FrameRule + \fi + \ifx\FV@Tab\FV@TrueTab + \let\FV@TrueTabSaveWidth\FV@TrueTabSaveWidth@Save + \setcounter{FV@TrueTabCounter}{0}% + \fi + \sbox{\FV@LineBox}{% + \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>\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 + \FV@LeftListNumber + \FV@LeftListFrame + \FancyVerbFormatLine{% + \FancyVerbHighlightLine{% + \parbox[t]{\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% + \else + \let\FV@PYG#2% + \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@BreakByTokenAnywhereBreak\relax +\def\FV@DetokMacro@StripSpace#1 {#1} +%% \Finale +\endinput +%% +%% End of file `fvextra.sty'. diff --git a/src/lmroman12-regular.otf b/src/lmroman12-regular.otf new file mode 100644 index 0000000000000000000000000000000000000000..bfe97085cee5c1dd29fd8b8a84ffe6e3296c3634 GIT binary patch literal 110400 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 literal 0 HcmV?d00001