123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- \ProvidesClass{nimdoc}[2022/04/17, 2018/01/01 LaTeX2e nonstandard class]
- \LoadClass[a4paper,11pt]{article}
- \usepackage[a4paper,xetex,left=3cm,right=3cm,top=1.5cm,bottom=2cm]{geometry}
- % for 2-sided printing with larger inner "binding" margin
- %\usepackage[a4paper,xetex,twoside,left=4cm,right=2cm,top=1.5cm,bottom=2cm]{geometry}
- % for e-readers with 1.77:1 aspect ratio (e.g. 1920x1080)
- %\usepackage[xetex,paperheight=27.6cm,paperwidth=15.5cm,left=3mm,right=3mm,top=3mm,bottom=3mm]{geometry}
- % for e-readers with 1.45:1 aspect ratio (e.g. 1200x825)
- %\usepackage[xetex,paperheight=22.5cm,paperwidth=15.5cm,left=3mm,right=3mm,top=3mm,bottom=3mm]{geometry}
- % for e-readers with 1.33:1 aspect ratio (e.g. 1872x1404)
- %\usepackage[xetex,paperheight=20.7cm,paperwidth=15.5cm,left=3mm,right=3mm,top=3mm,bottom=3mm]{geometry}
- \usepackage{fontspec}
- % logic to select default font with some fall-back fonts.
- \IfFontExistsTF{Times New Roman}{%
- \setmainfont{Times New Roman} % the default font
- \typeout{========================================= nim: using Times New Roman}
- }{
- \IfFontExistsTF{FreeSerif}{%
- \setmainfont{FreeSerif} % fallback #1 - official GNU font, resembles Times
- \typeout{========================================= nim: using FreeSerif}
- }{
- \IfFontExistsTF{DejaVuSerif}{%
- \setmainfont{DejaVuSerif} % fallback #2 - very widespread free font
- \typeout{========================================= nim: using DejaVuSerif}
- }{
- \typeout{!!!!!!!!!!!!!!!!!!! Fonts not found !!!!!!!!!!!!!!!!!!!!!!!}
- }
- }
- }
- % default monospace font for code:
- \usepackage{GoMono}
- \usepackage{relsize}
- % make this monospace font 2 steps smaller to hold 80-character line
- \newcommand{\rstverbblockfont}{\smaller[2]}
- \newcommand{\rstverbinlinefont}{\smaller}
- \usepackage{parskip} % paragraphs delimited by vertical space, no indent
- \usepackage{graphicx}
- \usepackage{makeidx}
- \newcommand{\nimindexterm}[2]{#2\index{#2}\label{#1}}
- \makeindex
- \usepackage{dingbat} % for \carriagereturn, etc
- \usepackage{fvextra} % for code blocks (works better than original fancyvrb)
- \fvset{
- breaklines,
- breakafter={=}:|\_\{\}[](){,}.;+-*/'",
- breaksymbolleft=\color{red}{\ensuremath{\hookrightarrow}},
- breaksymbolright=\color{red}{\small\carriagereturn}
- }
- \fvinlineset{%
- breaklines,
- breakafter={=}:|\_\{\}[](){,}.;+-*/'",
- % that does not work at all when we underline inline code by ulem :-(
- commandchars=\\\{\}
- }
- \usepackage{scrextend} % for the `addmargin` environment
- \usepackage[table]{xcolor}
- \usepackage[urlbordercolor=blue,linkbordercolor=cyan,
- pdfborderstyle={/S/U/W 1}]{hyperref}
- \usepackage{enumitem} % for option list, enumList, and rstfootnote
- \usepackage[most]{tcolorbox} % boxes around admonitions, code blocks, doc.item
- \newtcolorbox{rstadmonition}[1][]{blanker, breakable,
- left=3mm, right=0mm, top=1mm, bottom=1mm,
- before upper=\indent, parbox=false, #1}
- \newtcolorbox{rstquote}[1][]{blanker, breakable,
- left=3mm, right=3mm, top=1mm, bottom=1mm,
- parbox=false,
- borderline west={0.3em}{0pt}{lightgray},
- borderline north={0.05em}{0pt}{lightgray},
- borderline east={0.05em}{0pt}{lightgray},
- borderline south={0.05em}{0pt}{lightgray}}
- \definecolor{rstframecolor}{rgb}{0.85, 0.8, 0.6}
- \usepackage{booktabs}
- \belowrulesep=0ex
- \aboverulesep=0ex
- \renewcommand{\arraystretch}{1.1}
- \newtcolorbox{rstprebox}[1][]{blanker, breakable,
- left=3mm, right=3mm, top=1mm, bottom=1mm,
- borderline ={0.1em}{0pt}{rstframecolor},
- before upper=\indent, parbox=false, #1}
- \newenvironment{rstpre}{%
- \VerbatimEnvironment\begingroup\begin{rstprebox}%
- \begin{Verbatim}[fontsize=\rstverbblockfont , commandchars=\\\{\}]}%
- {\end{Verbatim}\end{rstprebox}\endgroup}
- \newtcolorbox{rstdocitembox}[1][]{blanker, breakable,
- left=3mm, right=3mm, top=1mm, bottom=1mm,
- borderline ={1pt}{0pt}{cyan},
- before upper=\indent, parbox=false, #1}
- % Inline code formatting: grey underline,
- % use \Verb from fvextras e.g. to display -- correctly as double -
- \usepackage[normalem]{ulem}
- \newcommand\rstuline{\bgroup\markoverwith{\textcolor{rstframecolor}{\rule[-0.8ex]{2pt}{1.0pt}}}\ULon}
- \newcommand{\rstcode}[1]{%
- {\rstverbinlinefont\Verb{\rstuline{#1}}}%
- }
- \newcommand{\rstcodeitem}[1]{\Verb{#1}}
- \newenvironment{rstdocitem}{%
- \VerbatimEnvironment\begingroup\begin{rstdocitembox}%
- \begin{Verbatim}[fontsize=\rstverbblockfont , commandchars=\\\{\}]}%
- {\end{Verbatim}\end{rstdocitembox}\endgroup}
- \newenvironment{rstfootnote}{\begin{description}[labelindent=1em,leftmargin=1em,labelwidth=2.6em]}{\end{description}}
- \ifdim\linewidth<30em
- \def\rstoptleftmargin{0.4\linewidth}
- \def\rstoptlabelwidth{0.35\linewidth}
- \else
- \def\rstoptleftmargin{12em}
- \def\rstoptlabelwidth{10.5em}
- \fi
- \newenvironment{rstoptlist}{%
- \begin{description}[font=\sffamily\bfseries,style=nextline,leftmargin=\rstoptleftmargin,labelwidth=\rstoptlabelwidth]}{\end{description}}
- \usepackage{multirow}
- \usepackage{tabulary} % tables with adjustable cell width and no overflow
- % make tabulary prevent overflows (https://tex.stackexchange.com/a/195088)
- \tymin=60pt
- \tymax=\maxdimen
- % to pack tabulary into a new environment, special syntax is needed :-(
- \newenvironment{rsttab}[1]{\tabulary{\linewidth}{#1}}{\endtabulary}
- \newcommand{\rstsub}[1]{\raisebox{-0.5ex}{\scriptsize{#1}}}
- \newcommand{\rstsup}[1]{\raisebox{0.5ex}{\scriptsize{#1}}}
- \newcommand{\rsthA}[2][]{\section[#1]{#2}}
- \newcommand{\rsthB}[2][]{\subsection[#1]{#2}}
- \newcommand{\rsthC}[2][]{\subsubsection[#1]{#2}}
- \newcommand{\rsthD}[2][]{\paragraph[#1]{#2}}
- \newcommand{\rsthE}[2][]{\paragraph[#1]{#2}}
- \newcommand{\rstovA}[2][]{\section*[#1]{#2}}
- \newcommand{\rstovB}[2][]{\subsection*[#1]{#2}}
- \newcommand{\rstovC}[2][]{\subsubsection*[#1]{#2}}
- \newcommand{\rstovD}[2][]{\paragraph*[#1]{#2}}
- \newcommand{\rstovE}[2][]{\paragraph*[#1]{#2}}
- % Syntax highlighting:
- \newcommand{\spanDecNumber}[1]{\textbf{\textcolor{darkgray}{#1}}}
- \newcommand{\spanBinNumber}[1]{\textbf{\textcolor{darkgray}{#1}}}
- \newcommand{\spanHexNumber}[1]{\textbf{\textcolor{darkgray}{#1}}}
- \newcommand{\spanOctNumber}[1]{\textbf{\textcolor{darkgray}{#1}}}
- \newcommand{\spanFloatNumber}[1]{\textbf{\textcolor{darkgray}{#1}}}
- \newcommand{\spanIdentifier}[1]{#1}
- \newcommand{\spanKeyword}[1]{\textbf{#1}}
- \newcommand{\spanStringLit}[1]{\textbf{\textcolor{darkgray}{#1}}}
- \newcommand{\spanLongStringLit}[1]{\textbf{\textcolor{darkgray}{#1}}}
- \newcommand{\spanCharLit}[1]{#1}
- \newcommand{\spanEscapeSequence}[1]{#1}
- \newcommand{\spanOperator}[1]{\textbf{#1}}
- \newcommand{\spanPunctuation}[1]{#1}
- \newcommand{\spanComment}[1]{\emph{#1}}
- \newcommand{\spanLongComment}[1]{\emph{#1}}
- \newcommand{\spanRegularExpression}[1]{#1}
- \newcommand{\spanTagStart}[1]{#1}
- \newcommand{\spanTagEnd}[1]{#1}
- \newcommand{\spanKey}[1]{#1}
- \newcommand{\spanValue}[1]{#1}
- \newcommand{\spanRawData}[1]{\textbf{\textcolor{darkgray}{#1}}}
- \newcommand{\spanAssembler}[1]{#1}
- \newcommand{\spanPreprocessor}[1]{#1}
- \newcommand{\spanDirective}[1]{#1}
- \newcommand{\spanCommand}[1]{#1}
- \newcommand{\spanRule}[1]{#1}
- \newcommand{\spanHyperlink}[1]{#1}
- \newcommand{\spanLabel}[1]{#1}
- \newcommand{\spanReference}[1]{#1}
- \newcommand{\spanOther}[1]{#1}
- \newcommand{\spantok}[1]{\fbox{#1}}
- \newcommand{\spanPrompt}[1]{\textcolor{red}{\textbf{#1}}}
- \newcommand{\spanProgramOutput}[1]{\textcolor{darkgray}{\textbf{#1}}}
- \newcommand{\spanprogram}[1]{\textbf{\underline{#1}}}
- \newcommand{\spanoption}[1]{\textbf{\textcolor{darkgray}{#1}}}
- % Never allow text overflow to margin:
- \setlength\emergencystretch{\hsize}\hbadness=10000
|