- Add a Pandoc defaults file - Add a Pandoc template based on the default one - Add chapter headers to each section ### Usage To use, install Pandoc and ConTeXt, then simply run `pandoc -d ./pandoc.yaml` from the repo root. ### Maintenance When new chapters get added, the `pandoc.yaml` will need to be updated to include each new chapter's markdown file(s). ### Miscellaneous Notes - The PDF generated complies with PDF/A 1b:2005 by default. - The PDF also contains the source markdown files as attachments - All links are fully functional! - Includes a table of contents! With links to each section! ### Conclusion Enjoy!pull/268/head
parent
7aff64740e
commit
7d932d43b3
@ -0,0 +1,191 @@
|
|||||||
|
$if(context-lang)$
|
||||||
|
\mainlanguage[$context-lang$]
|
||||||
|
$endif$
|
||||||
|
$if(context-dir)$
|
||||||
|
\setupalign[$context-dir$]
|
||||||
|
\setupdirections[bidi=on,method=two]
|
||||||
|
$endif$
|
||||||
|
% Enable hyperlinks
|
||||||
|
\setupinteraction
|
||||||
|
[state=start,
|
||||||
|
$if(title)$
|
||||||
|
title={$title$},
|
||||||
|
$endif$
|
||||||
|
$if(subtitle)$
|
||||||
|
subtitle={$subtitle$},
|
||||||
|
$endif$
|
||||||
|
$if(author)$
|
||||||
|
author={$for(author)$$author$$sep$; $endfor$},
|
||||||
|
$endif$
|
||||||
|
$if(keywords)$
|
||||||
|
keyword={$for(keywords)$$keywords$$sep$; $endfor$},
|
||||||
|
$endif$
|
||||||
|
style=$linkstyle$,
|
||||||
|
color=$linkcolor$,
|
||||||
|
contrastcolor=$linkcontrastcolor$]
|
||||||
|
\setupurl[style=$urlstyle$]
|
||||||
|
|
||||||
|
% make chapter, section bookmarks visible when opening document
|
||||||
|
\placebookmarks[chapter, section, subsection, subsubsection, subsubsubsection, subsubsubsubsection][chapter, section]
|
||||||
|
\setupinteractionscreen[option={bookmark,title}]
|
||||||
|
|
||||||
|
$if(papersize)$
|
||||||
|
\setuppapersize[$for(papersize)$$papersize$$sep$,$endfor$]
|
||||||
|
$endif$
|
||||||
|
$if(layout)$
|
||||||
|
\setuplayout[$for(layout)$$layout$$sep$,$endfor$]
|
||||||
|
$endif$
|
||||||
|
$if(pagenumbering)$
|
||||||
|
\setuppagenumbering[$for(pagenumbering)$$pagenumbering$$sep$,$endfor$]
|
||||||
|
$else$
|
||||||
|
\setuppagenumbering[location={footer,middle}]
|
||||||
|
$endif$
|
||||||
|
$if(pdfa)$
|
||||||
|
% attempt to generate PDF/A
|
||||||
|
\setupbackend
|
||||||
|
[format=PDF/A-$pdfa$,
|
||||||
|
profile={$if(pdfaiccprofile)$$for(pdfaiccprofile)$$pdfaiccprofile$$sep$,$endfor$$else$sRGB.icc$endif$},
|
||||||
|
intent=$if(pdfaintent)$$pdfaintent$$else$sRGB IEC61966-2.1$endif$]
|
||||||
|
$endif$
|
||||||
|
\setupbackend[export=yes]
|
||||||
|
\setupstructure[state=start,method=auto]
|
||||||
|
|
||||||
|
% use microtypography
|
||||||
|
\definefontfeature[default][default][script=latn, protrusion=quality, expansion=quality, itlc=yes, textitalics=yes, onum=yes, pnum=yes]
|
||||||
|
\definefontfeature[default:tnum][default][tnum=yes, pnum=no]
|
||||||
|
\definefontfeature[smallcaps][script=latn, protrusion=quality, expansion=quality, smcp=yes, onum=yes, pnum=yes]
|
||||||
|
\setupalign[hz,hanging]
|
||||||
|
\setupitaliccorrection[global, always]
|
||||||
|
|
||||||
|
\setupbodyfontenvironment[default][em=italic] % use italic as em, not slanted
|
||||||
|
|
||||||
|
\definefallbackfamily[mainface][rm][CMU Serif][preset=range:greek, force=yes]
|
||||||
|
\definefontfamily[mainface][rm][$if(mainfont)$$mainfont$$else$Latin Modern Roman$endif$]
|
||||||
|
\definefontfamily[mainface][mm][$if(mathfont)$$mathfont$$else$Latin Modern Math$endif$]
|
||||||
|
\definefontfamily[mainface][ss][$if(sansfont)$$sansfont$$else$Latin Modern Sans$endif$]
|
||||||
|
\definefontfamily[mainface][tt][$if(monofont)$$monofont$$else$Latin Modern Typewriter$endif$][features=none]
|
||||||
|
\setupbodyfont[mainface$if(fontsize)$,$fontsize$$endif$]
|
||||||
|
|
||||||
|
\setupwhitespace[$if(whitespace)$$whitespace$$else$medium$endif$]
|
||||||
|
$if(indenting)$
|
||||||
|
\setupindenting[$for(indenting)$$indenting$$sep$,$endfor$]
|
||||||
|
$endif$
|
||||||
|
$if(interlinespace)$
|
||||||
|
\setupinterlinespace[$for(interlinespace)$$interlinespace$$sep$,$endfor$]
|
||||||
|
$endif$
|
||||||
|
|
||||||
|
\setuphead[chapter] [style=\tfd\setupinterlinespace,header=empty]
|
||||||
|
\setuphead[section] [style=\tfc\setupinterlinespace]
|
||||||
|
\setuphead[subsection] [style=\tfb\setupinterlinespace]
|
||||||
|
\setuphead[subsubsection] [style=\bf]
|
||||||
|
\setuphead[subsubsubsection] [style=\sc]
|
||||||
|
\setuphead[subsubsubsubsection][style=\it]
|
||||||
|
|
||||||
|
\definesectionlevels
|
||||||
|
[default]
|
||||||
|
[section, subsection, subsubsection, subsubsubsection, subsubsubsubsection]
|
||||||
|
|
||||||
|
$if(headertext)$
|
||||||
|
\setupheadertexts$for(headertext)$[$headertext$]$endfor$
|
||||||
|
$endif$
|
||||||
|
$if(footertext)$
|
||||||
|
\setupfootertexts$for(footertext)$[$footertext$]$endfor$
|
||||||
|
$endif$
|
||||||
|
$if(number-sections)$
|
||||||
|
$else$
|
||||||
|
\setuphead[chapter, section, subsection, subsubsection, subsubsubsection, subsubsubsubsection][number=no]
|
||||||
|
$endif$
|
||||||
|
|
||||||
|
\definedescription
|
||||||
|
[description]
|
||||||
|
[headstyle=bold, style=normal, location=hanging, width=broad, margin=1cm, alternative=hanging]
|
||||||
|
|
||||||
|
\setupitemize[autointro] % prevent orphan list intro
|
||||||
|
\setupitemize[indentnext=no]
|
||||||
|
|
||||||
|
\defineitemgroup[enumerate]
|
||||||
|
\setupenumerate[each][fit][itemalign=left,distance=.5em,style={\feature[+][default:tnum]}]
|
||||||
|
|
||||||
|
\setupfloat[figure][default={here,nonumber}]
|
||||||
|
\setupfloat[table][default={here,nonumber}]
|
||||||
|
|
||||||
|
\setupxtable[frame=off]
|
||||||
|
\setupxtable[head][topframe=on]
|
||||||
|
\setupxtable[body][]
|
||||||
|
\setupxtable[foot][]
|
||||||
|
\setupxtable[lastrow][bottomframe=on]
|
||||||
|
|
||||||
|
$if(emphasis-commands)$
|
||||||
|
$emphasis-commands$
|
||||||
|
$endif$
|
||||||
|
$if(highlighting-commands)$
|
||||||
|
$highlighting-commands$
|
||||||
|
$endif$
|
||||||
|
$if(csl-refs)$
|
||||||
|
\definemeasure[cslhangindent][1.5em]
|
||||||
|
\definenarrower[hangingreferences][left=\measure{cslhangindent}]
|
||||||
|
\definestartstop [cslreferences] [
|
||||||
|
$if(csl-hanging-indent)$
|
||||||
|
before={%
|
||||||
|
\starthangingreferences[left]
|
||||||
|
\setupindenting[-\leftskip,yes,first]
|
||||||
|
\doindentation
|
||||||
|
},
|
||||||
|
after=\stophangingreferences,
|
||||||
|
$endif$
|
||||||
|
]
|
||||||
|
$endif$
|
||||||
|
$if(includesource)$
|
||||||
|
$for(sourcefile)$
|
||||||
|
\attachment[file=$curdir$/$sourcefile$,method=hidden]
|
||||||
|
$endfor$
|
||||||
|
$endif$
|
||||||
|
$for(header-includes)$
|
||||||
|
$header-includes$
|
||||||
|
$endfor$
|
||||||
|
|
||||||
|
\starttext
|
||||||
|
$if(title)$
|
||||||
|
\startalignment[middle]
|
||||||
|
{\tfd\setupinterlinespace $title$}
|
||||||
|
$if(subtitle)$
|
||||||
|
\smallskip
|
||||||
|
{\tfa\setupinterlinespace $subtitle$}
|
||||||
|
$endif$
|
||||||
|
$if(author)$
|
||||||
|
\smallskip
|
||||||
|
{\tfa\setupinterlinespace $for(author)$$author$$sep$\crlf $endfor$}
|
||||||
|
$endif$
|
||||||
|
$if(date)$
|
||||||
|
\smallskip
|
||||||
|
{\tfa\setupinterlinespace $date$}
|
||||||
|
$endif$
|
||||||
|
\bigskip
|
||||||
|
\stopalignment
|
||||||
|
$endif$
|
||||||
|
$if(abstract)$
|
||||||
|
\midaligned{\it Abstract}
|
||||||
|
\startnarrower[2*middle]
|
||||||
|
$abstract$
|
||||||
|
\stopnarrower
|
||||||
|
\blank[big]
|
||||||
|
$endif$
|
||||||
|
$for(include-before)$
|
||||||
|
$include-before$
|
||||||
|
$endfor$
|
||||||
|
$if(toc)$
|
||||||
|
\completecontent
|
||||||
|
$endif$
|
||||||
|
$if(lof)$
|
||||||
|
\completelistoffigures
|
||||||
|
$endif$
|
||||||
|
$if(lot)$
|
||||||
|
\completelistoftables
|
||||||
|
$endif$
|
||||||
|
|
||||||
|
$body$
|
||||||
|
|
||||||
|
$for(include-after)$
|
||||||
|
$include-after$
|
||||||
|
$endfor$
|
||||||
|
\stoptext
|
@ -0,0 +1,52 @@
|
|||||||
|
from: gfm
|
||||||
|
input-files:
|
||||||
|
- ${.}/README.md
|
||||||
|
- ${.}/00-environment/README.md
|
||||||
|
- ${.}/01-bootsector-barebones/README.md
|
||||||
|
- ${.}/02-bootsector-print/README.md
|
||||||
|
- ${.}/03-bootsector-memory/README.md
|
||||||
|
- ${.}/04-bootsector-stack/README.md
|
||||||
|
- ${.}/05-bootsector-functions-strings/README.md
|
||||||
|
- ${.}/06-bootsector-segmentation/README.md
|
||||||
|
- ${.}/07-bootsector-disk/README.md
|
||||||
|
- ${.}/08-32bit-print/README.md
|
||||||
|
- ${.}/09-32bit-gdt/README.md
|
||||||
|
- ${.}/10-32bit-enter/README.md
|
||||||
|
- ${.}/11-kernel-crosscompiler/README.md
|
||||||
|
- ${.}/12-kernel-c/README.md
|
||||||
|
- ${.}/13-kernel-barebones/README.md
|
||||||
|
- ${.}/14-checkpoint/README.md
|
||||||
|
- ${.}/15-video-ports/README.md
|
||||||
|
- ${.}/16-video-driver/README.md
|
||||||
|
- ${.}/17-video-scroll/README.md
|
||||||
|
- ${.}/18-interrupts/README.md
|
||||||
|
- ${.}/19-interrupts-irqs/README.md
|
||||||
|
- ${.}/20-interrupts-timer/README.md
|
||||||
|
- ${.}/21-shell/README.md
|
||||||
|
- ${.}/22-malloc/README.md
|
||||||
|
- ${.}/23-fixes/README.md
|
||||||
|
- ${.}/24-el-capitan/README.md
|
||||||
|
|
||||||
|
to: pdf
|
||||||
|
pdf-engine: context
|
||||||
|
output-file: os-tutorial.pdf
|
||||||
|
|
||||||
|
variables:
|
||||||
|
title: OS Tutorial
|
||||||
|
subtitle: How to create an OS from scratch
|
||||||
|
author: Carlos Fenollosa
|
||||||
|
includesource: true
|
||||||
|
papersize: letter
|
||||||
|
pdfa: true
|
||||||
|
linkcolor: blue
|
||||||
|
linkcontrastcolor: red
|
||||||
|
|
||||||
|
file-scope: true
|
||||||
|
verbosity: ERROR
|
||||||
|
tab-stop: 4
|
||||||
|
template: ./pandoc.context
|
||||||
|
dpi: 300
|
||||||
|
toc: true
|
||||||
|
top-level-division: chapter
|
||||||
|
reference-location: section
|
||||||
|
number-sections: true
|
Loading…
Reference in new issue