From c4bb83e673034f10f91183859d7bda2df9a2dd86 Mon Sep 17 00:00:00 2001 From: Markus Makela Date: Tue, 24 Mar 2015 07:33:51 +0200 Subject: [PATCH] Updated PDF generation. --- Documentation/generate-pdf.cmake | 19 ++- Documentation/makepdf.sh | 61 +++++++++ Documentation/maxscale.latex | 219 +++++++++++++++++++++++++++++++ 3 files changed, 293 insertions(+), 6 deletions(-) create mode 100755 Documentation/makepdf.sh create mode 100644 Documentation/maxscale.latex diff --git a/Documentation/generate-pdf.cmake b/Documentation/generate-pdf.cmake index 982332e45..9ef8ebde8 100644 --- a/Documentation/generate-pdf.cmake +++ b/Documentation/generate-pdf.cmake @@ -7,12 +7,19 @@ find_package(Pandoc) if(PANDOC_FOUND AND BUILD_DIR) file(MAKE_DIRECTORY ${BUILD_DIR}/pdf) - file(GLOB_RECURSE MARKDOWN *.md) + file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/makepdf.sh DESTINATION ${BUILD_DIR}) + execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/Documentation ${BUILD_DIR}) + file(GLOB_RECURSE MARKDOWN ${CMAKE_CURRENT_BINARY_DIR}/*.md) + foreach(VAR ${MARKDOWN}) - string(REPLACE ".md" ".pdf" OUTPUT ${VAR}) - get_filename_component(DIR ${VAR} DIRECTORY) - string(REPLACE "${CMAKE_CURRENT_BINARY_DIR}" "${BUILD_DIR}/pdf" FILE ${OUTPUT}) - execute_process(COMMAND ${CMAKE_COMMAND} -E chdir ${DIR} ${PANDOC_EXECUTABLE} ${VAR} -o ${OUTPUT}) - execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${OUTPUT} ${FILE}) + execute_process(COMMAND ${BUILD_DIR}/makepdf.sh ${VAR}) + execute_process(COMMAND ${CMAKE_COMMAND} -E echo ${VAR}) endforeach() + + file(GLOB PDF ${BUILD_DIR}/Documentation/*.pdf) + + foreach(FILE ${PDF}) + execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${FILE} ${BUILD_DIR}/pdf/) + endforeach() + endif() diff --git a/Documentation/makepdf.sh b/Documentation/makepdf.sh new file mode 100755 index 000000000..879a0bcc5 --- /dev/null +++ b/Documentation/makepdf.sh @@ -0,0 +1,61 @@ +#!/usr/bin/env bash + +# This template is really important. It includes changes to make images a reasonable size, +# gracefully handle Header 4 and Header 5 translation to paragraph and subparagraph, +# stick the MariaDB logo at the top of the document, etc. +template=$PWD/maxscale.latex + +# make sure we can find LaTeX. feel free to remove this if you have it somewhere more normal + + +pwd=$PWD + +input=$1 +if ! shift; then + echo "ERROR: must specify input filename" >&2 + exit 1 +fi + +file=${input##*/} +basename=${file%%.*} +basedir=${input%/*} + +# we have to cd to the location of the file so that images with relative paths can be found +if ! cd "$basedir"; then + echo "ERROR: could not cd to $basedir" >&2 + exit 1 +fi + +# this filter function can be used for some pipline of miscellaneous stuff you want to do to the input file +# if you want to add more filters, you can just build a normal Unix pipeline. +filter(){ + # this instructs pandoc to build a titleblock + # the idea is that the first line will be something like "MariaDB MaxScale" + # and the 2nd line will be something like "Configuration & Usage Scenarios". + # put a hard linebreak between those so they're both part of the "title". + # pandoc supports another line that is the author. right now I manually make that blank. + # and we add the current date to the end of the 2 lines in the titleblock + #date=$(date +"%B %e, %Y") + printf -v date "%(%B %e, %Y)T" + #awk ' /^$/ {p++} p==1{printf "%% %s\n", "'"$date"'";p++} !p{printf "%% "} {print} ' + awk ' NR==1{ printf "%% " } # put % in front of first line + NR==2{ printf " " } # put some space in front of 2nd line. pandoc requires this to continue the title + NR==3{ printf "%% %s", "'"$date"'" } # 3rd line becomes the date. + {printf "%s", $0} # now print whatever was actually on the line. (but leave off the newline) should have been blank for the 3rd line! + {printf "%s", "\n"} # newline. + ' +} + + +pandoc_vars=( + -V fontsize=12pt + -V version=1.10 + -V geometry:margin=1in + --toc + -t latex + --latex-engine=xelatex + --template="$template" +) + +pandoc "${pandoc_vars[@]}" <"$file" -o "${pwd}/${basename}.pdf" + diff --git a/Documentation/maxscale.latex b/Documentation/maxscale.latex new file mode 100644 index 000000000..03552e1e9 --- /dev/null +++ b/Documentation/maxscale.latex @@ -0,0 +1,219 @@ +\documentclass[$if(fontsize)$$fontsize$,$endif$$if(lang)$$lang$,$endif$$if(papersize)$$papersize$,$endif$$for(classoption)$$classoption$$sep$,$endfor$]{$documentclass$} + +% Package titlesec is used to support redefining paragraph and subparagraph +\usepackage[raggedright]{titlesec} +$if(fontfamily)$ +\usepackage{$fontfamily$} +$else$ +\usepackage{lmodern} +$endif$ +$if(linestretch)$ +\usepackage{setspace} +\setstretch{$linestretch$} +$endif$ +\usepackage{amssymb,amsmath} +\usepackage{ifxetex,ifluatex} +\usepackage{fixltx2e} % provides \textsubscript +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \usepackage[T1]{fontenc} + \usepackage[utf8]{inputenc} +$if(euro)$ + \usepackage{eurosym} +$endif$ +\else % if luatex or xelatex + \ifxetex + \usepackage{mathspec} + \usepackage{xltxtra,xunicode} + \else + \usepackage{fontspec} + \fi + \defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase} + \newcommand{\euro}{€} +$if(mainfont)$ + \setmainfont{$mainfont$} +$endif$ +$if(sansfont)$ + \setsansfont{$sansfont$} +$endif$ +$if(monofont)$ + \setmonofont[Mapping=tex-ansi]{$monofont$} +$endif$ +$if(mathfont)$ + \setmathfont(Digits,Latin,Greek){$mathfont$} +$endif$ +\fi +% use upquote if available, for straight quotes in verbatim environments +\IfFileExists{upquote.sty}{\usepackage{upquote}}{} +% use microtype if available +\IfFileExists{microtype.sty}{% +\usepackage{microtype} +\UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts +}{} +$if(geometry)$ +\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry} +$endif$ +$if(lang)$ +\ifxetex + \usepackage{polyglossia} + \setmainlanguage{$mainlang$} +\else + \usepackage[shorthands=off,$lang$]{babel} +\fi +$endif$ +$if(natbib)$ +\usepackage{natbib} +\bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$} +$endif$ +$if(biblatex)$ +\usepackage{biblatex} +$if(biblio-files)$ +\bibliography{$biblio-files$} +$endif$ +$endif$ +$if(listings)$ +\usepackage{listings} +$endif$ +$if(lhs)$ +\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{} +$endif$ +$if(highlighting-macros)$ +$highlighting-macros$ +$endif$ +$if(verbatim-in-note)$ +\usepackage{fancyvrb} +\VerbatimFootnotes +$endif$ +$if(tables)$ +\usepackage{longtable,booktabs} +$endif$ +$if(graphics)$ +\usepackage{graphicx} +\makeatletter +\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi} +\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi} +\makeatother +% Scale images if necessary, so that they will not overflow the page +% margins by default, and it is still possible to overwrite the defaults +% using explicit options in \includegraphics[width, height, ...]{} +%\setkeys{Gin}{width=.75\textwidth,keepaspectratio} +%\setkeys{Gin}{width=10cm,keepaspectratio} +%\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio} + +% we redefine the \includegraphics command so that it always scales with a factor of 0.5 +% for some reason, without this images are too large and grainy and make ugly PDFs +\let\ORIincludegraphics\includegraphics +\renewcommand{\includegraphics}[2][]{\ORIincludegraphics[scale=0.5,#1]{#2}} +$endif$ +\ifxetex + \usepackage[setpagesize=false, % page size defined by xetex + unicode=false, % unicode breaks when used with xetex + xetex]{hyperref} +\else + \usepackage[unicode=true]{hyperref} +\fi +\hypersetup{breaklinks=true, + bookmarks=true, + pdfauthor={$author-meta$}, + pdftitle={$title-meta$}, + colorlinks=true, + citecolor=$if(citecolor)$$citecolor$$else$blue$endif$, + urlcolor=$if(urlcolor)$$urlcolor$$else$blue$endif$, + linkcolor=$if(linkcolor)$$linkcolor$$else$magenta$endif$, + pdfborder={0 0 0}} +\urlstyle{same} % don't use monospace font for urls +$if(links-as-notes)$ +% Make links footnotes instead of hotlinks: +\renewcommand{\href}[2]{#2\footnote{\url{#1}}} +$endif$ +$if(strikeout)$ +\usepackage[normalem]{ulem} +% avoid problems with \sout in headers with hyperref: +\pdfstringdefDisableCommands{\renewcommand{\sout}{}} +$endif$ +\setlength{\parindent}{0pt} +\setlength{\parskip}{6pt plus 2pt minus 1pt} +\setlength{\emergencystretch}{3em} % prevent overfull lines +$if(numbersections)$ +\setcounter{secnumdepth}{5} +$else$ +\setcounter{secnumdepth}{0} +$endif$ +$if(verbatim-in-note)$ +\VerbatimFootnotes % allows verbatim text in footnotes +$endif$ + +% These depend on package titlesec +% These support "Header 4" and "Header 5" from markdown/pandoc. Those translate, respectively, +% to "paragraph" and "subparagraph" in LaTeX. Without these tricks, they're rendered on the same +% line as the following body text. +\titleformat{\paragraph}[hang]{\normalfont\normalsize\bfseries}{\theparagraph}{1em}{} +\titlespacing*{\paragraph}{0pt}{3.25ex plus 1ex minus .2ex}{0.5em} +\titleformat{\subparagraph}[hang]{\normalfont\normalsize\bfseries}{\theparagraph}{1em}{} +\titlespacing*{\subparagraph}{0pt}{3.25ex plus 1ex minus .2ex}{0.5em} + +$if(title)$ +\title{ + % Add MariaDB Corporation logo above document title + $title$$if(subtitle)$\\\vspace{0.5em}{\large $subtitle$}$endif$ +} +$endif$ +$if(author)$ +\author{$for(author)$$author$$sep$ \and $endfor$} +$endif$ +\date{$date$} +$for(header-includes)$ +$header-includes$ +$endfor$ + + +\begin{document} +$if(title)$ +\maketitle +$endif$ +$if(abstract)$ +\begin{abstract} +$abstract$ +\end{abstract} +$endif$ + +$for(include-before)$ +$include-before$ + +$endfor$ +$if(toc)$ +{ +\hypersetup{linkcolor=black} +\setcounter{tocdepth}{$toc-depth$} +\tableofcontents +} +$endif$ +$if(lot)$ +\listoftables +$endif$ +$if(lof)$ +\listoffigures +$endif$ +$body$ + +$if(natbib)$ +$if(biblio-files)$ +$if(biblio-title)$ +$if(book-class)$ +\renewcommand\bibname{$biblio-title$} +$else$ +\renewcommand\refname{$biblio-title$} +$endif$ +$endif$ +\bibliography{$biblio-files$} + +$endif$ +$endif$ +$if(biblatex)$ +\printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$ + +$endif$ +$for(include-after)$ +$include-after$ + +$endfor$ +\end{document}