From 597ca15f61b68a91d9b63893123b824eef69d8c8 Mon Sep 17 00:00:00 2001 From: Rick Calixte <10281587+rcalixte@users.noreply.github.com> Date: Mon, 6 Jul 2026 15:53:35 -0400 Subject: [PATCH] Add CI for PDF generation * Closes #21 --- .github/workflows/gen-pdf.yaml | 33 + content/asm_2.md | 11 +- content/asm_3.md | 6 +- content/assets/asm-3-args-on-stack.png | Bin 0 -> 17990 bytes content/assets/asm-3-stack-of__double-1.png | Bin 0 -> 14466 bytes content/assets/asm-3-stack-of__double-2.png | Bin 0 -> 19339 bytes content/assets/rax.png | Bin 0 -> 7329 bytes content/assets/stack-before-call.png | Bin 0 -> 7359 bytes content/assets/stack-during-call.png | Bin 0 -> 10018 bytes content/assets/stack-preserve-bp.png | Bin 0 -> 12897 bytes content/assets/stack.png | Bin 0 -> 29827 bytes include.tex | 36 ++ pandoc-docker.sh | 30 + pandoc-en-US.yaml | 37 ++ pandoc.sh | 35 ++ unicode.latex | 646 ++++++++++++++++++++ 16 files changed, 826 insertions(+), 8 deletions(-) create mode 100644 .github/workflows/gen-pdf.yaml create mode 100644 content/assets/asm-3-args-on-stack.png create mode 100644 content/assets/asm-3-stack-of__double-1.png create mode 100644 content/assets/asm-3-stack-of__double-2.png create mode 100644 content/assets/rax.png create mode 100644 content/assets/stack-before-call.png create mode 100644 content/assets/stack-during-call.png create mode 100644 content/assets/stack-preserve-bp.png create mode 100644 content/assets/stack.png create mode 100644 include.tex create mode 100755 pandoc-docker.sh create mode 100644 pandoc-en-US.yaml create mode 100755 pandoc.sh create mode 100644 unicode.latex diff --git a/.github/workflows/gen-pdf.yaml b/.github/workflows/gen-pdf.yaml new file mode 100644 index 0000000..6ff3289 --- /dev/null +++ b/.github/workflows/gen-pdf.yaml @@ -0,0 +1,33 @@ +--- +name: Generate PDF using Pandoc (Docker) + +on: + push: + branches: + - master + workflow_dispatch: null + +jobs: + create_pdf: + runs-on: ubuntu-latest + container: + image: pandoc/latex:3 + steps: + - uses: actions/checkout@v7 + + - uses: docker://pandoc/latex:3 + timeout-minutes: 10 + with: + entrypoint: './pandoc-docker.sh' + + - id: short_sha + env: + GITHUB_SHA: ${{ github.sha }} + run: echo "short_sha=${GITHUB_SHA::7}" >> $GITHUB_OUTPUT + + - uses: softprops/action-gh-release@v3 + with: + tag_name: version-${{ steps.short_sha.outputs.short_sha }} + draft: false + files: | + *.pdf diff --git a/content/asm_2.md b/content/asm_2.md index 7df69dc..38ee08d 100644 --- a/content/asm_2.md +++ b/content/asm_2.md @@ -3,6 +3,7 @@ Some days ago I wrote the first post about [Introduction to assembly](asm_1.md) which, to my surprise, caused great interest: ![newscombinator](./assets/newscombinator-screenshot.png) + ![reddit](./assets/reddit-screenshot.png) It motivated me to continue describing my journey through learning assembly programming for Linux x86_64. During these days I got great feedback from people all over the Internet. There were many words of gratitude, but, what is more important to me, there was also much adequate advice and very useful criticism. Especially, I want to say thank you for the great feedback to: @@ -59,7 +60,7 @@ You can find a detailed description of registers in the [Intel software develope There are 16 registers of 64 bits size, from `rax` to `r15`. Each register also has smaller parts with their own names. For example, as we may see in the table above, the lower 32 bits of the `rax` register are called `eax`. Similarly, the lower 16 bits of the `eax` register are called `ax`. Finally, the lower 8 bits of the `ax` register are called `al`, while the higher 8 bits are called `ah`. We can visualize this as: -![rax](./assets/rax.svg) +![rax](./assets/rax.png) The general purpose registers are used in many different cases, like performing arithmetic and logical operations, transferring data, memory address calculation operations, passing parameters to functions and system calls, and many more. When going through these chapters, we will see how to use the general purpose registers to perform different operations. @@ -312,15 +313,15 @@ These two instructions at the beginning of each function are called [function pr Now that we know the rough meaning of the stack frame and the usage of the `rbp`, `rsp`, and `rip` registers, let's try to understand what happens when we call a function. Let's look at the stack before the `call foo` is executed. Our stack looks like this: -![stack-before-call](./assets/stack-before-call.svg) +![stack-before-call](./assets/stack-before-call.png) After executing the `call` instruction, the return address (or address of the next instruction) is pushed to the stack. So our stack layout during the call looks like this: -![stack-during-call](./assets/stack-during-call.svg) +![stack-during-call](./assets/stack-during-call.png) At the beginning of every new function, we must preserve the current value of the `rbp` register by pushing it onto the stack. This value acts as a base pointer of the previous function. In other words, the value of the `rbp` at the beginning of each function represents the address of the bottom (or the base) of the caller's stack. Since we are in a new function, it needs a new stack frame and, as a result, a new base. At this point, the stack layout looks like this: -![stack-preserve-bp](./assets/stack-preserve-bp.svg) +![stack-preserve-bp](./assets/stack-preserve-bp.png) The next step is to put the current value of the stack pointer (`rsp`) into the `rbp` register. This marks the beginning of the new stack frame for our function `foo`. With the stack frame ready, we can start managing function parameters and local variables. @@ -334,7 +335,7 @@ Let's read once again the sentence from the paragraph above: What was the address stored in the `rbp` register? Our stack pointer! So after running the last `mov` instruction in the function `foo`, our stack frame looks like this: -![stack](./assets/stack.svg) +![stack](./assets/stack.png) That is the whole point of the `rbp` register. It plays the role of an anchor or a base point in the function. Using the positive offsets, we can access the return address and parameters pushed onto the stack by the caller. On the other hand, negative offsets allow us to access local variables of the current function. diff --git a/content/asm_3.md b/content/asm_3.md index ff7f0c5..111e89b 100644 --- a/content/asm_3.md +++ b/content/asm_3.md @@ -82,11 +82,11 @@ __double(int): After the first two lines of the `__double` function, the stack frame for this function is set and looks like this: -![asm-3-stack-fram-of__double-1](./assets/asm-3-stack-of__double-1.svg) +![asm-3-stack-fram-of__double-1](./assets/asm-3-stack-of__double-1.png) The third instruction of the `__double` function places its first parameter to the stack with an offset of `-20`. Next, the value `2`, representing the local variable two, is also stored on the stack with an offset of `-4`. At this point, the stack frame of our function looks like this: -![asm-3-stack-fram-of__double-2](./assets/asm-3-stack-of__double-2.svg) +![asm-3-stack-fram-of__double-2](./assets/asm-3-stack-of__double-2.png) Finally, we put the value from the stack at offset `-20` (the value of the function's parameter) into the `eax` register and multiply it by `2`, which is located on the stack at offset `-4`. The result of the multiplication is then stored in the `eax` register. This simple example shows how the stack is used to access both parameters and local variables of a function. @@ -353,7 +353,7 @@ Before calculating the sum of two numbers from the command-line arguments, we ne According to the table above, the command-line arguments are located on the stack like this: -![asm-3-args-on-stack](./assets/asm-3-args-on-stack.svg) +![asm-3-args-on-stack](./assets/asm-3-args-on-stack.png) As we can see, the number of command-line arguments passed to the program is stored at the top of the stack, with the `rsp` register pointing to it. Fetching this value from the stack gives us the number of arguments. Additionally, we already know the `cmp` instruction, which allows us to compare two values. Using this knowledge, we can perform the first check in our program — verifying that the program got two arguments from the command-line or printing an error message otherwise: diff --git a/content/assets/asm-3-args-on-stack.png b/content/assets/asm-3-args-on-stack.png new file mode 100644 index 0000000000000000000000000000000000000000..64ce8ea97f15c7573e6a3e53342246f083ad7ff0 GIT binary patch literal 17990 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 G?*9Pd+3Dl} literal 0 HcmV?d00001 diff --git a/content/assets/asm-3-stack-of__double-1.png b/content/assets/asm-3-stack-of__double-1.png new file mode 100644 index 0000000000000000000000000000000000000000..20777e898f60ed76ce19d9613366b30716f8e95f GIT binary patch literal 14466 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%0DEe7^OkGLtKXu4 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 literal 0 HcmV?d00001 diff --git a/content/assets/stack-before-call.png b/content/assets/stack-before-call.png new file mode 100644 index 0000000000000000000000000000000000000000..559b4a640b3880a17bb1787116169e04e3be4985 GIT binary patch literal 7359 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 literal 0 HcmV?d00001 diff --git a/content/assets/stack-during-call.png b/content/assets/stack-during-call.png new file mode 100644 index 0000000000000000000000000000000000000000..198c78b6d4f0c501109e4c548529c04d2cf1e9fc GIT binary patch literal 10018 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 Bus{F+ literal 0 HcmV?d00001 diff --git a/content/assets/stack-preserve-bp.png b/content/assets/stack-preserve-bp.png new file mode 100644 index 0000000000000000000000000000000000000000..db09d7e3a4026e0a82d9e97c16bc28b3ef38e989 GIT binary patch literal 12897 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 z zdh)xkNs^@-({0SD?`MbAFuTxzh2-4IoG9ydAcc40cs`ht5iWvDP0fuYrgJA_@EzPv zFu5-RNORg?v70rZ=9<#YeSXLJXoordfkMJE-UB+sr)S2q9G7E%ufBqSUOR7aiHP0l z(pI@hzKUP1x$p2>l|Nr&KQ+4*FF8ZGR^p*m!v@WZW~iMTJA*_j%wNOWARb*2aM97t zx(1E8CA94m`bb46tfr{J?;HiqMgIk8Rg<)RPOG3mEI2v8UTI4eNdr@9)Q&2V1Nbd8 zuTAI_`Z>59X8}7?*3D`_+sbe7cvRheP|F@vfw?G!@5Gw?jNM_{nTIv%pfna^^?}mx z1>=q84z7X+y{9~PgM+#M^H@LZ052z9mfPn5NN`0uW@aQVQ>7HRysH|HDOcmNviZB*Eh_oP z`I9L!WZiKs&)!$f;==x)Bu7v-|IjOCcZ%dWC%a0j>o`m->R}*>MQ#x8edZ>+zCUK6 zCD*k*<1SvuOpbjuMtVJz?c-A~Co#+CPpn*5^TR%w6Q0cbN>6el>=pV{?-gj$Rg@Dg zpJz1K|A3~o*P77uBo#e;3w=$Km&OU;o#3sjnWxD44X@(jvUELAv($L$Y8@ZaLZ(O^ lGB~=ssw(P@89NfW`{i_pYQI$@{HiEIT0%iQOH}{&e*z}qn{EIA literal 0 HcmV?d00001 diff --git a/include.tex b/include.tex new file mode 100644 index 0000000..31268a2 --- /dev/null +++ b/include.tex @@ -0,0 +1,36 @@ +\usepackage{enumitem} +\ifcsundef{c@none}{\newcounter{none}}{} +\setlistdepth{9} + +\setlist[itemize,1]{label=$\bullet$} +\setlist[itemize,2]{label=$\bullet$} +\setlist[itemize,3]{label=$\bullet$} +\setlist[itemize,4]{label=$\bullet$} +\setlist[itemize,5]{label=$\bullet$} +\setlist[itemize,6]{label=$\bullet$} +\setlist[itemize,7]{label=$\bullet$} +\setlist[itemize,8]{label=$\bullet$} +\setlist[itemize,9]{label=$\bullet$} +\renewlist{itemize}{itemize}{9} + +\setlist[enumerate,1]{label=$\arabic*.$} +\setlist[enumerate,2]{label=$\alph*.$} +\setlist[enumerate,3]{label=$\roman*.$} +\setlist[enumerate,4]{label=$\arabic*.$} +\setlist[enumerate,5]{label=$\alpha*$} +\setlist[enumerate,6]{label=$\roman*.$} +\setlist[enumerate,7]{label=$\arabic*.$} +\setlist[enumerate,8]{label=$\alph*.$} +\setlist[enumerate,9]{label=$\roman*.$} +\renewlist{enumerate}{enumerate}{9} + +\usepackage{float} +\makeatletter +\let\origfigure\figure +\let\endorigfigure\endfigure +\renewenvironment{figure}[1][2]{% + \expandafter\origfigure\expandafter[H]% +}{% + \endorigfigure +} +\makeatother diff --git a/pandoc-docker.sh b/pandoc-docker.sh new file mode 100755 index 0000000..2aa45ea --- /dev/null +++ b/pandoc-docker.sh @@ -0,0 +1,30 @@ +#! /bin/sh + +# Install dependencies for successful PDF generation +for i in 1 2 3 4 5; do + tlmgr update --self && break + echo "tlmgr attempt $i failed, retrying in 5s..." + sleep 5 +done + +for i in 1 2 3 4 5; do + tlmgr install collection-fontsrecommended ctex enumitem float \ + greek-fontenc koma-script polyglossia realscripts xltxtra && break + echo "tlmgr install attempt $i failed, retrying in 5s..." + sleep 5 +done + +# Generate PDF using pandoc +for filename in pandoc-*yaml; do + # Create variable for language based on filename + language=$(echo "${filename}" | cut -d'.' -f1 | cut -d'-' -f2-3) + + # Attempt to create the PDF + echo "Generating ${language} PDF..." + if pandoc -d "${filename}"; then + echo "Success! The ${language} PDF has been successfully created!" + else + echo "Failure! The ${language} PDF failed to be created!" + exit 1 + fi +done diff --git a/pandoc-en-US.yaml b/pandoc-en-US.yaml new file mode 100644 index 0000000..e6e76b7 --- /dev/null +++ b/pandoc-en-US.yaml @@ -0,0 +1,37 @@ +--- +metadata: + title: Introduction to the Assembly Programming Language + author: Alex Kuleshov + category: "License: Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License" + keywords: + - "assembly" + - "introduction" +standalone: true +variables: + documentclass: scrbook + lang: en-US + links-as-notes: true + lot: false + lof: false + margin-top: 1.27cm + margin-left: .635cm + margin-right: .635cm + margin-bottom: 1.27cm +table-of-contents: true +toc-depth: 2 +file-scope: true +from: markdown+rebase_relative_paths +include-in-header: include.tex +verbosity: ERROR +pdf-engine: xelatex +template: unicode.latex +input-files: + - ./content/asm_1.md + - ./content/asm_2.md + - ./content/asm_3.md + - ./content/asm_4.md + - ./content/asm_5.md + - ./content/asm_6.md + - ./content/asm_7.md +output-file: introduction-to-assembly.pdf +... diff --git a/pandoc.sh b/pandoc.sh new file mode 100755 index 0000000..2f5d5b1 --- /dev/null +++ b/pandoc.sh @@ -0,0 +1,35 @@ +#! /bin/bash + +# Generate PDF using pandoc +generate_pdfs() { + for filename in pandoc-*yaml; do + # Create variable for language based on filename + IFS=- read _ language <<< "${filename}" + language=${language/.yaml/} + + # Attempt to create the PDF + echo "Generating ${language} PDF..." + if pandoc -d "${filename}"; then + echo "Success! The ${language} PDF has been successfully created!" + else + echo "Failure! The ${language} PDF failed to be created!" + exit 1 + fi + done +} + +# Check for dependencies +check_dependencies () { + for dependency in "${dependencies[@]}" + do + if ! [ -x "$(command -v $dependency)" ]; then + echo "Error: $dependency is not installed." >&2 + exit 1 + fi + done +} + +dependencies=("pandoc" "tex") + +check_dependencies +generate_pdfs diff --git a/unicode.latex b/unicode.latex new file mode 100644 index 0000000..00e6d4c --- /dev/null +++ b/unicode.latex @@ -0,0 +1,646 @@ +% 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$ +$if(babel-lang)$ + $babel-lang$, +$endif$ +$endif$ +$for(classoption)$ + $classoption$$sep$, +$endfor$ +]{$documentclass$} +$if(beamer)$ +$if(background-image)$ +\usebackgroundtemplate{% + \includegraphics[width=\paperwidth]{$background-image$}% +} +% In beamer background-image does not work well when other images are used, so this is the workaround +\pgfdeclareimage[width=\paperwidth,height=\paperheight]{background}{$background-image$} +\usebackgroundtemplate{\pgfuseimage{background}} +$endif$ +\usepackage{pgfpages} +\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)$ + $if(mainfontfallback)$ + \ifLuaTeX + \usepackage{luaotfload} + \directlua{luaotfload.add_fallback("mainfontfallback",{ + $for(mainfontfallback)$"$mainfontfallback$"$sep$,$endfor$ + })} + \fi + $endif$ + \setmainfont[$for(mainfontoptions)$$mainfontoptions$$sep$,$endfor$$if(mainfontfallback)$,RawFeature={fallback=mainfontfallback}$endif$]{$mainfont$} +$endif$ +$if(sansfont)$ + $if(sansfontfallback)$ + \ifLuaTeX + \usepackage{luaotfload} + \directlua{luaotfload.add_fallback("sansfontfallback",{ + $for(sansfontfallback)$"$sansfontfallback$"$sep$,$endfor$ + })} + \fi + $endif$ + \setsansfont[$for(sansfontoptions)$$sansfontoptions$$sep$,$endfor$$if(sansfontfallback)$,RawFeature={fallback=sansfontfallback}$endif$]{$sansfont$} +$endif$ +$if(monofont)$ + $if(monofontfallback)$ + \ifLuaTeX + \usepackage{luaotfload} + \directlua{luaotfload.add_fallback("monofontfallback",{ + $for(monofontfallback)$"$monofontfallback$"$sep$,$endfor$ + })} + \fi + $endif$ + \setmonofont[$for(monofontoptions)$$monofontoptions$$sep$,$endfor$$if(monofontfallback)$,RawFeature={fallback=monofontfallback}$endif$]{$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 +\newsavebox\pandoc@box +\newcommand*\pandocbounded[1]{% scales image to fit in text height/width + \sbox\pandoc@box{#1}% + \Gscale@div\@tempa{\textheight}{\dimexpr\ht\pandoc@box+\dp\pandoc@box\relax}% + \Gscale@div\@tempb{\linewidth}{\wd\pandoc@box}% + \ifdim\@tempb\p@<\@tempa\p@\let\@tempa\@tempb\fi% select the smaller of both + \ifdim\@tempa\p@<\p@\scalebox{\@tempa}{\usebox\pandoc@box}% + \else\usebox{\pandoc@box}% + \fi% +} +% Set default figure placement to htbp +\def\fps@figure{htbp} +\makeatother +$endif$ +$if(svg)$ +\usepackage{svg} +$endif$ +$if(strikeout)$ +$-- also used for underline +\ifLuaTeX + \usepackage{luacolor} + \usepackage[soul]{lua-ul} +\else + \usepackage{soul} +$if(beamer)$ + \makeatletter + \let\HL\hl + \renewcommand\hl{% fix for beamer highlighting + \let\set@color\beamerorig@set@color + \let\reset@color\beamerorig@reset@color + \HL} + \makeatother +$endif$ +$if(CJKmainfont)$ + \ifXeTeX + % soul's \st doesn't work for CJK: + \usepackage{xeCJKfntef} + \renewcommand{\st}[1]{\sout{#1}} + \fi +$endif$ +\fi +$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 +\makeatletter +\ifx\paragraph\undefined\else + \let\oldparagraph\paragraph + \renewcommand{\paragraph}{ + \@ifstar + \xxxParagraphStar + \xxxParagraphNoStar + } + \newcommand{\xxxParagraphStar}[1]{\oldparagraph*{#1}\mbox{}} + \newcommand{\xxxParagraphNoStar}[1]{\oldparagraph{#1}\mbox{}} +\fi +\ifx\subparagraph\undefined\else + \let\oldsubparagraph\subparagraph + \renewcommand{\subparagraph}{ + \@ifstar + \xxxSubParagraphStar + \xxxSubParagraphNoStar + } + \newcommand{\xxxSubParagraphStar}[1]{\oldsubparagraph*{#1}\mbox{}} + \newcommand{\xxxSubParagraphNoStar}[1]{\oldsubparagraph{#1}\mbox{}} +\fi +\makeatother +$endif$ +$endif$ +$if(pagestyle)$ +\pagestyle{$pagestyle$} +$endif$ +$if(csl-refs)$ +% definitions for citeproc citations +\NewDocumentCommand\citeproctext{}{} +\NewDocumentCommand\citeproc{mm}{% + \begingroup\def\citeproctext{#2}\cite{#1}\endgroup} +\makeatletter + % allow citations to break across lines + \let\@cite@ofmt\@firstofone + % avoid brackets around text for \cite: + \def\@biblabel#1{} + \def\@cite#1#2{{#1\if@tempswa , #2\fi}} +\makeatother +\newlength{\cslhangindent} +\setlength{\cslhangindent}{1.5em} +\newlength{\csllabelwidth} +\setlength{\csllabelwidth}{3em} +\newenvironment{CSLReferences}[2] % #1 hanging-indent, #2 entry-spacing + {\begin{list}{}{% + \setlength{\itemindent}{0pt} + \setlength{\leftmargin}{0pt} + \setlength{\parsep}{0pt} + % turn on hanging indent if param 1 is 1 + \ifodd #1 + \setlength{\leftmargin}{\cslhangindent} + \setlength{\itemindent}{-1\cslhangindent} + \fi + % set entry spacing + \setlength{\itemsep}{#2\baselineskip}}} + {\end{list}} +\usepackage{calc} +\newcommand{\CSLBlock}[1]{\hfill\break\parbox[t]{\linewidth}{\strut\ignorespaces#1\strut}} +\newcommand{\CSLLeftMargin}[1]{\parbox[t]{\csllabelwidth}{\strut#1\strut}} +\newcommand{\CSLRightInline}[1]{\parbox[t]{\linewidth - \csllabelwidth}{\strut#1\strut}} +\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{rm}[$for(mainfontoptions)$$mainfontoptions$$sep$,$endfor$$if(mainfontfallback)$,RawFeature={fallback=mainfontfallback}$endif$]{$mainfont$} +\fi +$endif$ +$endif$ +$for(babel-otherlangs)$ +\babelprovide[import]{$babel-otherlangs$} +$endfor$ +$for(babelfonts/pairs)$ +\babelfont[$babelfonts.key$]{rm}{$babelfonts.value$} +$endfor$ +% get rid of language-specific shorthands (see #6817): +\let\LanguageShortHands\languageshorthands +\def\languageshorthands#1{} +$if(selnolig-langs)$ +\ifLuaTeX + \usepackage[$for(selnolig-langs)$$it$$sep$,$endfor$]{selnolig} % disable illegal ligatures +\fi +$endif$ +$endif$ +$for(header-includes)$ +$header-includes$ +$endfor$ +$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$ +\usepackage{bookmark} +\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$if(titlegraphicoptions)$[$for(titlegraphicoptions)$$titlegraphicoptions$$sep$, $endfor$]$endif${$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$ + \setcounter{tocdepth}{$toc-depth$} + \tableofcontents +\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}