47 def save(self, filename, compile=False):
48 """
49 Saves the latex-code into a file, adds preamble and end of document,
50 and compiles the code if requested.
51 @param filename latex-code is stored in this file, should end on .tex
52 @param compile compile the .tex file using pdflatex into a .pdf file
53 """
54 output = r"""
55 \documentclass[10pt,a4paper]{article}
56 \usepackage[latin1]{inputenc}
57 \usepackage[T1]{fontenc}
58 \usepackage{amsmath}
59 \usepackage{amsfonts}
60 \usepackage{amssymb}
61 \usepackage{graphicx}
62 \usepackage{caption}
63 \usepackage{lmodern}
64 \usepackage{placeins}
65 \usepackage{multicol}
66 \usepackage{tikz}
67 \usetikzlibrary{shapes.arrows,chains, positioning}
68 \usepackage{booktabs} %professional tables
69 \usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm]{geometry}
70 \usepackage{microtype} %optimises spacing, needs to go after fonts
71 \usepackage{hyperref} %adds links (also in TOC), should be loaded at the very end
72 \usepackage{longtable}
73 \usepackage{color}
74 \usepackage{listings}
75
76 \definecolor{gray}{rgb}{0.4,0.4,0.4}
77 \definecolor{darkblue}{rgb}{0.0,0.0,0.6}
78 \definecolor{cyan}{rgb}{0.0,0.6,0.6}
79
80 \lstset{
81 basicstyle=\ttfamily\scriptsize,
82 columns=fullflexible,
83 showstringspaces=false,
84 commentstyle=\color{gray}\upshape
85 }
86
87 \lstdefinelanguage{XML}
88 {
89 morestring=[b]",
90 morestring=[s]{>}{<},
91 morecomment=[s]{<?}{?>},
92 stringstyle=\color{black},
93 identifierstyle=\color{darkblue},
94 keywordstyle=\color{cyan},
95 morekeywords={xmlns,version,type}% list your attributes here
96 }
97
98 \usepackage[load-configurations=abbreviations]{siunitx}
99 \makeatletter
100 % In newer versions of latex there is a problem with the calc package and tikz
101 % http://tex.stackexchange.com/questions/289551/how-to-resolve-conflict-between-versions-of-texlive-and-pgf
102 \def\pgfmathparse@#1{%
103 % Stuff for calc compatibility.
104 \let\real=\pgfmath@calc@real
105 \let\minof=\pgfmath@calc@minof
106 \let\maxof=\pgfmath@calc@maxof
107 \let\ratio=\pgfmath@calc@ratio
108 \let\widthof=\pgfmath@calc@widthof
109 \let\heightof=\pgfmath@calc@heightof
110 \let\depthof=\pgfmath@calc@depthof
111 % No (math) units yet.
112 \global\pgfmathunitsdeclaredfalse
113 \global\pgfmathmathunitsdeclaredfalse
114 % Expand expression so any remaining CSs are registers
115 % or box dimensions (i.e. |\wd|, |\ht|, |\dp|).
116 \edef\pgfmath@expression{#1}%
117 %
118 \expandafter\pgfmathparse@trynumber@loop\pgfmath@expression\pgfmath@parse@stop
119 %
120 % this here is the _real_ parser. it is invoked by
121 % \pgfmathparse@trynumber@loop if that says "this is no number"
122 %\pgfmathparse@@\pgfmath@parse@stop%
123 }
124 \makeatother
125 \begin{document}
126 """
127 output += self.output
128 output += r"\end{document}"
129
130 with open(filename, 'w') as f:
131 f.write(output)
132 if compile:
133 for i in range(0, 2):
134 ret = subprocess.call(['pdflatex', '-halt-on-error', '-interaction=nonstopmode', filename])
135 if ret != 0:
136 raise RuntimeError("pdflatex failed to create FEI summary PDF, please check.")
137 return self
138
139