This isn't everything you're looking for, but it's a start, and hopefully will give you an idea of how easily document class customization can start out. Mind you, I'm not going to worry much about emulating bad habits from the Word document, but focus on simple semantic content and formatting.
Let's start with some minimal content from your PDF:
\documentclass[12pt]{article}
\title{Personal Protective Clothing Level}
\date{7/24/08}
\author{Harper}
\begin{document}
\maketitle
\section{Procedures}
\subsection{Structure Fires}
\begin{enumerate}
\item All firefighters operating in the ``hot zone'' of a structure fire will be in
full turnouts to include coat, pants, helmet, hood, gloves and boots. When operating
in an IDLH atmosphere an SCBA shall be worn.
\item Engineers when operating close to the incident and exposed to products of
combustion shall also be in full PPE including SCBA. If outside the ``hot zone''
engineers will be allowed to modify their PPE accordingly. If the Engineer is
considered to be a part of the RIT team, then full PPE including an SCBA shall be
worn.
\end{enumerate}
\end{document}
Using the standard article class as given, you get page content that looks like
After writing a (relatively) simple document class based off article, the same content (with \documentclass[12pt]{sop}
and \approved{Chief Harper}
instead of \documentclass[12pt]{article}
, you get page content that looks like
and
The file sop.cls that created this layout is:
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{sop}[2011/07/08 v0.2 Modified article class for standard operating procedures]
% https://stackoverflow.com/questions/581916/how-do-you-extend-article-document-class-in-latex
% Passes and class options to the underlying article class
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
\ProcessOptions
\LoadClass{article}
% Redefine the page margins
\RequirePackage[left=1in,right=1in,top=1in,bottom=1in]{geometry}
% Modifications to the section titles
\RequirePackage{titlesec}
\renewcommand{\thesection}{\Roman{section}}
\titleformat{\section}{\normalfont\bfseries}
{\makebox[3em][l]{\thesection{}.}}{0pt}{}
\titleformat{\subsection}{\normalfont\bfseries}
{}{0pt}{}
% Modification of title block
\RequirePackage{titling}
\RequirePackage{multirow}
\newcommand{\approved}[1]{\newcommand{\theapproved}{#1}}
% Ref: http://tex.stackexchange.com/questions/3988/titlesec-versus-titling-mangling-thetitle
\let\oldtitle\title
\renewcommand{\title}[1]{\oldtitle{#1}\newcommand{\mythetitle}{#1}}
\renewcommand{\maketitle}{%
\begin{tabular}{|c|p{2in}|l|l|} \hline
\multirow{3}{*}{logo} & \multicolumn{1}{p{2.5in}|}{\centering Mammoth Lakes Fire Protection District } & Date: \thedate & Number: \\ \cline{2-4}
& \multicolumn{1}{p{2.5in}|}{\centering Standard Operating Procedure } & \multicolumn{2}{p{2.5in}|}{Title: \mythetitle} \\ \cline{2-4}
& Approved By: \theapproved & \multicolumn{2}{l|}{Revision Date: \quad / \quad / \quad} \\ \hline
\end{tabular}
}
% For "Page N of M"
\RequirePackage{lastpage}
% For easier construction of page headers/footers
\RequirePackage{fancyhdr}
\fancypagestyle{plain}{ % for first page
\fancyhf{}
\fancyfoot[L]{\framebox{Author: \theauthor}\\ \jobname{}.tex}
\fancyfoot[R]{\framebox{Page: \thepage{} of \pageref*{LastPage}}}
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}
}
\pagestyle{fancy} % for other pages
\fancyhf{}
\fancyhead[R]{%
\begin{tabular}{|c|c|} \hline %
Revision Date: & Number: \\
\quad / \quad / \quad & \\ \hline
\end{tabular}%
}
\fancyfoot[L]{\framebox{Author: \theauthor}}
\fancyfoot[R]{\framebox{Page: \thepage{} of \pageref*{LastPage}}} % \pageref* if we use hyperref, \pageref otherwise
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}
% For easier customization of itemized, enumerated, and other lists
\RequirePackage{enumitem}
% For hyperlinked cross-references
\RequirePackage{hyperref}
% Ensure first page is correct style
\thispagestyle{plain}
% That's all, folks!
\endinput
See this SO question for where I got started with this.
You can pass the lang
option to the template using -V
which passes it further to the babel package.
pandoc -V lang=nl somefile.markdown
This is translated to the following LaTeX code which should result in dutch chapter headings.
\usepackage[dutch]{babel}
Best Answer
1.
A pandoc latex template is just a regular latex file with some placeholder variables in it. You can print the default template with
pandoc -D latex > default.latex
.This means, that you can use any existing latex file and just add those variables to make a template.
Let's take this minimal latex document
mwe.tex
:Now you can replace
Here is some text
with$body$
and executeecho "Here is some text" | pandoc --template mew.tex -s --to latex
and you will see, that$body$
is replaced with the text.That way, you can make a pandoc template out of any latex file. Just replace the texts and commands in the latex file with pandoc variables. Of course you need to load all the packages that are used by pandoc! You can consult the default template to see, what pandoc usually requires.
How the templating engine works in detail and which variables are available is documented in the manual: https://pandoc.org/MANUAL.html#templates
2.
Where to store the files? Pandoc finds files in the current directory and in the data-directory.
pandoc -v
will print the data-dir on your system. If your data-dir is$HOME/.local/share/pandoc
, then the templates will be found under:$HOME/.local/share/pandoc/templates