Created
June 9, 2011 21:23
-
-
Save michaelt/1017791 to your computer and use it in GitHub Desktop.
Simple Pandoc latex.template with comments
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
%!TEX TS-program = xelatex | |
\documentclass[12pt]{scrartcl} | |
% This ^^^ is a standard LaTeX document class declaration | |
% (the previous line is a pseudo-comment, declaring that we will | |
% use the special XeTeX machinery for its more extensive font list | |
% and its use of unicode.) | |
% If you made this line more akin to the one in the default | |
% latex.template file, say: | |
% \documentclass$if(fontsize)$[$fontsize$]$endif${scrartcl} | |
% then you would have a 'variable', fontsize, and could write things | |
% like `markdown2pdf my.txt --xetex --variable=fontsize:12pt -o my.pdf` or | |
% `markdown2pdf my.txt --xetex --variable=fontsize:24pt`. I have a couple | |
% of basic templates I call with `--template=whatever.template` and | |
% adjust things like font size as I please. | |
% Here's an alternative command for two column landscape | |
% uncomment this and comment the above and you will have ... | |
% 2 columns landscape, not bad for some purposes. (If you strike | |
% the word 'landscape' you will have two narrow newspaperlike | |
% columns; scientists like that, because irrationality must | |
% show itself somewhere): | |
%\documentclass[12pt,twocolumn,landscape]{scrartcl} | |
%\setlength{\columnsep}{.5in} | |
% ^^^ columns are too close together in LaTeX so we add this | |
% `columnsep` command. | |
% I use the special 'komascript' article class "scrartcl" | |
% reasons I can't entirely remember; I'm not sure it's that great. | |
% One reason is the unimportant one that, like many classes, | |
% it allows very big fonts which are convenient for booklet printing | |
% in the idiotic American way by shrinking letterpaper pages, | |
% which is what I usually do. | |
% 12pt, specified above is a rational font size of course. | |
% the standard LaTeX 'article' class declaration would be something like: | |
% \documentclass[12pt]{article} | |
% or for big type: | |
% \documentclass[24pt]{extarticle} | |
% but these restrict you to old-fashioned LaTeX materials. | |
% note that Kieran Healy uses the swank 'memoir' class, which might be | |
% worth a look. | |
% This template needs to be called with the `--xetex` flag. | |
% -- We are in swanky unicode, XeTeX land, and must now import these packages: | |
\usepackage{fontspec,xltxtra,xunicode} | |
% pandoc imports the extensive `amsmath` collection of symbols | |
% for typesetting ordinary math. | |
\usepackage{amsmath} | |
% if you use exotic symbols you need to import specific packages, eg. for | |
% electrical engineering diagrams, musical notation, the unspeakable rites | |
% of freemasonry etc. | |
% The `babel` package, among other things, lets you determine what | |
% language you are using in a given stretch of text, so that typesetting | |
% will go well. Here we specify that mostly, we are speaking English: | |
\usepackage[english]{babel} | |
% the `geometry` package makes for convenient adjusting of margins, which is what | |
% you asked about. Of course it can do much more, even make coffee for you. | |
\usepackage{geometry} | |
\geometry{verbose,letterpaper,tmargin=3cm,bmargin=3cm,lmargin=3cm,rmargin=3cm} | |
% so if you just keep a copy of this template in the directory you are working in, you | |
% can adjust the margins by going into this file and messing with the margins. | |
% the syntax is very unforgiving, but permits 3cm and 2.5in and some other things. | |
% Here I set my main font, which is an Apple Corporation Exclusive, golly. | |
% it's okay, but note the long discussion of 'contextuals' which is necessary to cools off | |
% some of its show-offy properties. You can make your essay look like the | |
% Declaration of Independence by specifying e.g. Ligatures={Rare} | |
% If you have a copy you might try it; as it is | |
% I will comment it out and supply something more certain to be around. | |
% \setmainfont{Hoefler Text} | |
% \setromanfont[Mapping=tex-text,Contextuals={NoWordInitial,NoWordFinal,NoLineInitial,NoLineFinal},Ligatures={NoCommon}]{Hoefler Text} | |
\setmainfont{Times Roman} | |
% properly one should specify a sanserif font and a monospace font | |
% see e.g. the example of Kieran Healy. But I hate sanserif fonts, | |
% and anyway there are defaults. | |
% These commands keep the koma system from making stupid sans serif section headings | |
\setkomafont{title}{\rmfamily\mdseries\upshape\normalsize} | |
\setkomafont{sectioning}{\rmfamily\mdseries\upshape\normalsize} | |
\setkomafont{descriptionlabel}{\rmfamily\mdseries\upshape\normalsize} | |
% I'm puzzled why I have this foonote speciality, | |
% I wonder if it's part of my problem I've been having, but wont look | |
% into it now. | |
\usepackage[flushmargin]{footmisc} | |
% \usepackage[hang,flushmargin]{footmisc} | |
% everything that follows is copied from the pandoc default template: | |
% I will interpolate a few comments. | |
% pandoc prefers unindented paragraphs in the European style: | |
\setlength{\parindent}{0pt} | |
% ... with paragraph breaks marked by a slight lengthening of | |
% the space between paragraphs: | |
\setlength{\parskip}{6pt plus 2pt minus 1pt} | |
\pagestyle{plain} | |
% this just numbers the pages. | |
% \pagestyle{empty} | |
% would give you no numbering | |
% after one-million man-years of macro-composition, | |
% there are also fancy pagestyles with much wilder options | |
% for headers and footers, of course. | |
% if you have code in your footnotes, the million macro march | |
% kind of bumps into itself. | |
% Pandoc, having just rendered your text into LaTeX, | |
% knows whether the 'variable' `verbatim-in-note` is True, and | |
% If it is, it asks for a LaTeX package that solves the dilemma: | |
$if(verbatim-in-note)$ | |
\usepackage{fancyvrb} | |
$endif$ | |
% note sure what 'fancy enums' are; something to do with lists, | |
% as the further comment suggests: | |
$if(fancy-enums)$ | |
% Redefine labelwidth for lists; otherwise, the enumerate package will cause | |
% markers to extend beyond the left margin. | |
\makeatletter\AtBeginDocument{% | |
\renewcommand{\@listi} | |
{\setlength{\labelwidth}{4em}} | |
}\makeatother | |
\usepackage{enumerate} | |
$endif$ | |
% What if you make a table? -- pandoc knows, of course, and | |
% then declares that its variable `table` is True and | |
% imports a table package suitable to its pleasantly simple tables. | |
% Needless to say infinitely complicated tables are possible in | |
% LaTeX with suitable packages. We are spared the temptation: | |
$if(tables)$ | |
\usepackage{array} | |
% Continuing on the topic of tables ... (we havent reached `endif`). | |
% The commented out line below is in the default pandoc latex.template. | |
% Some unpleasantness with table formatting must be corrected. | |
% This is needed because raggedright in table elements redefines \\: | |
\newcommand{\PreserveBackslash}[1]{\let\temp=\\#1\let\\=\temp} | |
\let\PBS=\PreserveBackslash | |
$endif$ | |
% New topic: What if you use subscripts? | |
% Pandoc remembers whether you did, assigning True to $subscript$ | |
% It then needs to adopt a default with an incantation like this: | |
$if(subscript)$ | |
\newcommand{\textsubscr}[1]{\ensuremath{_{\scriptsize\textrm{#1}}}} | |
$endif$ | |
% markdown inclines us to use links, since our texts can be made into html. | |
% Why not have clickable blue links even in | |
% learned, scientific, religious, juridical, poetical and other suchlike texts? | |
% Never mind that they have been proven to destroy the nervous system! | |
% First, what about the fact that links like http://example.com are | |
% technically code and thus must not be broken across lines? | |
% [breaklinks=true] to the rescue! | |
% Nowadays LaTeX can handle all of this with another half million macros: | |
\usepackage[breaklinks=true]{hyperref} | |
\hypersetup{colorlinks,% | |
citecolor=blue,% | |
filecolor=blue,% | |
linkcolor=blue,% | |
urlcolor=blue} | |
$if(url)$ | |
\usepackage{url} | |
$endif$ | |
% Images. In ye olde LaTeX one could only import a limited range of image | |
% types, e.g. the forgotten .eps files. Or else one simply drew the image with suitable | |
% commands and drawing packages. Today we want to import .jpg files we make with | |
% our smart phones or whatever: | |
$if(graphics)$ | |
\usepackage{graphicx} | |
% Comment from the pandoc default template: | |
% We will generate all images so they have a width \maxwidth. This means | |
% that they will get their normal width if they fit onto the page, but | |
% are scaled down if they would overflow the margins. | |
\makeatletter | |
\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth | |
\else\Gin@nat@width\fi} | |
\makeatother | |
\let\Oldincludegraphics\includegraphics | |
\renewcommand{\includegraphics}[1]{\Oldincludegraphics[width=\maxwidth]{#1}} | |
$endif$ | |
% Section numbering. Here again is a variable you can specify on the commandline | |
% `markdown2pdf my.txt --number-sections --xetex --template=/wherever/this/is -o my.pdf` | |
$if(numbersections)$ | |
$else$ | |
\setcounter{secnumdepth}{0} | |
$endif$ | |
% Wait, didn't we already discuss the crisis of code in footnotes? | |
% Evidently the order of unfolding of macros required that | |
% we import a package to deal with them earlier | |
% and issue a command it defines now. (Or maybe that's not the reason; | |
% very often the order does matter as the insane system of macro expansion | |
% must take place by stages.) | |
$if(verbatim-in-note)$ | |
\VerbatimFootnotes % allows verbatim text in footnotes | |
$endif$ | |
% you can include stuff for the header from a file specified on the command line; | |
% I've never done this, but that stuff will go here: | |
$for(header-includes)$ | |
$header-includes$ | |
$endfor$ | |
% If you specified title authors and date at the start of | |
% your pandoc-markdown file, pandoc knows the 'values' of the | |
% variables: title authors date and fills them in. | |
$if(title)$ | |
\title{$title$} | |
$endif$ | |
\author{$for(author)$$author$$sep$\\$endfor$} | |
$if(date)$ | |
\date{$date$} | |
$endif$ | |
% After filling in all these blanks above, or erasing them | |
% where they are not needed pandoc has finished writing the | |
% famous LaTeX *preamble* for your document. | |
% Now comes the all important command \begin{document} | |
% which will be paired with an \end{document} at the end. | |
% Pandoc knows whether you have a title, and has already | |
% specified what it is; if so, it demands that the title be rendered. | |
% Pandoc knows whether you want a table of contents, you | |
% specify this on the command line. | |
% Then, after fiddling with alignments, there comes the real | |
% business: pandoc slaps its rendering of your text in the place of | |
% the variable `body` | |
% It then concludes the document it has been writing. | |
\begin{document} | |
$if(title)$ | |
\maketitle | |
$endif$ | |
$if(toc)$ | |
\tableofcontents | |
$endif$ | |
$if(alignment)$ | |
\begin{$alignment$} | |
$endif$ | |
$body$ | |
%$if(alignment)$ | |
\end{$alignment$} | |
$endif$ | |
\end{document} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment