latex_sphinx_base.tplx
427 lines
| 15.2 KiB
| text/plain
|
TextLexer
Jonathan Frederic
|
r9922 | ((= NBConvert Sphinx-Latex Template | |
Jonathan Frederic
|
r9735 | ||
Jonathan Frederic
|
r9922 | Purpose: Allow export of PDF friendly Latex inspired by Sphinx. Most of the | |
template is derived directly from Sphinx source. | |||
Jonathan Frederic
|
r9735 | ||
Jonathan Frederic
|
r9922 | Inheritance: null>display_priority>latex_base | |
Jonathan Frederic
|
r9735 | ||
Jonathan Frederic
|
r9922 | Note: For best display, use latex syntax highlighting. =)) | |
Jonathan Frederic
|
r9735 | ||
Jonathan Frederic
|
r9781 | ((*- extends 'display_priority.tplx' -*)) | |
Jonathan Frederic
|
r9734 | ||
Jonathan Frederic
|
r9921 | %============================================================================== | |
% Declarations | |||
%============================================================================== | |||
Jonathan Frederic
|
r9919 | % In order to make sure that the input/output header follows the code it | |
Jonathan Frederic
|
r9929 | % preceeds, the needspace package is used to request that a certain | |
% amount of lines (specified by this variable) are reserved. If those | |||
% lines aren't available on the current page, the documenter will break | |||
% to the next page and the header along with accomanying lines will be | |||
% rendered together. This value specifies the number of lines that | |||
% the header will be forced to group with without a page break. | |||
((*- set min_header_lines = 4 -*)) | |||
Jonathan Frederic
|
r9919 | ||
Jonathan Frederic
|
r9920 | % This is the number of characters that are permitted per line. It's | |
% important that this limit is set so characters do not run off the | |||
% edges of latex pages (since latex does not always seem smart enough | |||
Jonathan Frederic
|
r9929 | % to prevent this in some cases.) This is only applied to textual output | |
Jonathan Frederic
|
r9940 | ((* if resources.sphinx.outputstyle == 'simple' *)) | |
Jonathan Frederic
|
r9960 | ((*- set wrap_size = 85 -*)) | |
Jonathan Frederic
|
r9940 | ((* elif resources.sphinx.outputstyle == 'notebook' *)) | |
Jonathan Frederic
|
r9960 | ((*- set wrap_size = 70 -*)) | |
Jonathan Frederic
|
r9940 | ((* endif *)) | |
Jonathan Frederic
|
r9922 | ||
Jonathan Frederic
|
r9921 | %============================================================================== | |
% Header | |||
%============================================================================== | |||
Jonathan Frederic
|
r9734 | ((* block header *)) | |
Jonathan Frederic
|
r9772 | ||
Jonathan Frederic
|
r9751 | % Header, overrides base | |
Jonathan Frederic
|
r9772 | ||
Jonathan Frederic
|
r9746 | % Make sure that the sphinx doc style knows who it inherits from. | |
\def\sphinxdocclass{(((parentdocumentclass)))} | |||
Matthias BUSSONNIER
|
r9809 | ||
Jonathan Frederic
|
r9746 | % Declare the document class | |
Jonathan Frederic
|
r9937 | \documentclass[letterpaper,10pt,english]{((( resources.sphinx.texinputs )))/sphinx(((documentclass)))} | |
Matthias BUSSONNIER
|
r9809 | ||
% Imports | |||
Jonathan Frederic
|
r9746 | \usepackage[utf8]{inputenc} | |
Matthias BUSSONNIER
|
r9809 | \DeclareUnicodeCharacter{00A0}{\\nobreakspace} | |
Jonathan Frederic
|
r9746 | \usepackage[T1]{fontenc} | |
\usepackage{babel} | |||
\usepackage{times} | |||
\usepackage{import} | |||
Jonathan Frederic
|
r9937 | \usepackage[((( resources.sphinx.chapterstyle )))]{((( resources.sphinx.texinputs )))/fncychap} | |
Jonathan Frederic
|
r9746 | \usepackage{longtable} | |
Jonathan Frederic
|
r9937 | \usepackage{((( resources.sphinx.texinputs )))/sphinx} | |
Jonathan Frederic
|
r9746 | \usepackage{multirow} | |
Jonathan Frederic
|
r9774 | \usepackage{amsmath} | |
\usepackage{amssymb} | |||
\usepackage{ucs} | |||
\usepackage{enumerate} | |||
Jonathan Frederic
|
r9928 | % Used to make the Input/Output rules follow around the contents. | |
\usepackage{needspace} | |||
Jonathan Frederic
|
r9781 | % Pygments requirements | |
\usepackage{fancyvrb} | |||
\usepackage{color} | |||
Jonathan Frederic
|
r9960 | ||
Jonathan Frederic
|
r9939 | % Needed to box output/input | |
Jonathan Frederic
|
r10035 | \usepackage{tikz} | |
\usetikzlibrary{calc,arrows,shadows} | |||
\usepackage[framemethod=tikz]{mdframed} | |||
Jonathan Frederic
|
r9939 | \usepackage{alltt} | |
Jonathan Frederic
|
r9781 | ||
Jonathan Frederic
|
r9920 | % Used to load and display graphics | |
\usepackage{graphicx} | |||
\graphicspath{ {figs/} } | |||
Jonathan Frederic
|
r10124 | \usepackage[Export]{adjustbox} % To resize | |
Jonathan Frederic
|
r9960 | ||
Jonathan Frederic
|
r9920 | ||
Jonathan Frederic
|
r9781 | % For formatting output while also word wrapping. | |
\usepackage{listings} | |||
Matthias BUSSONNIER
|
r9809 | \lstset{breaklines=true} | |
Jonathan Frederic
|
r9781 | \lstset{basicstyle=\small\ttfamily} | |
Jonathan Frederic
|
r9920 | ||
Jonathan Frederic
|
r9781 | %Pygments definitions | |
Jonathan Frederic
|
r9937 | ((( resources.sphinx.pygment_definitions ))) | |
Jonathan Frederic
|
r9960 | ||
Jonathan Frederic
|
r9939 | %Set pygments styles if needed... | |
((* if resources.sphinx.outputstyle == 'notebook' *)) | |||
Jonathan Frederic
|
r10035 | \definecolor{nbframe-border}{rgb}{0.867,0.867,0.867} | |
\definecolor{nbframe-bg}{rgb}{0.969,0.969,0.969} | |||
\definecolor{nbframe-in-prompt}{rgb}{0.0,0.0,0.502} | |||
\definecolor{nbframe-out-prompt}{rgb}{0.545,0.0,0.0} | |||
Jonathan Frederic
|
r9960 | ||
Jonathan Frederic
|
r9940 | \newenvironment{ColorVerbatim} | |
Jonathan Frederic
|
r10035 | {\begin{mdframed}[% | |
roundcorner=1.0pt, % | |||
backgroundcolor=nbframe-bg, % | |||
userdefinedwidth=1\linewidth, % | |||
leftmargin=0.1\linewidth, % | |||
innerleftmargin=0pt, % | |||
innerrightmargin=0pt, % | |||
linecolor=nbframe-border, % | |||
linewidth=1pt, % | |||
usetwoside=false, % | |||
everyline=true, % | |||
innerlinewidth=3pt, % | |||
innerlinecolor=nbframe-bg, % | |||
middlelinewidth=1pt, % | |||
middlelinecolor=nbframe-bg, % | |||
outerlinewidth=0.5pt, % | |||
outerlinecolor=nbframe-border % | |||
]} | |||
{\end{mdframed}} | |||
\newenvironment{InvisibleVerbatim} | |||
{\begin{mdframed}[leftmargin=0.1\linewidth,innerleftmargin=3pt,innerrightmargin=3pt, userdefinedwidth=1\linewidth, linewidth=0pt, linecolor=white, usetwoside=false]} | |||
Jonathan Frederic
|
r9939 | {\end{mdframed}} | |
Jonathan Frederic
|
r9960 | ||
Jonathan Frederic
|
r9939 | \renewenvironment{Verbatim}[1][\unskip] | |
{\begin{alltt}} | |||
{\end{alltt}} | |||
((* endif *)) | |||
Jonathan Frederic
|
r9781 | ||
Jonathan Frederic
|
r9920 | % Help prevent overflowing lines due to urls and other hard-to-break | |
% entities. This doesn't catch everything... | |||
Jonathan Frederic
|
r9781 | \sloppy | |
Jonathan Frederic
|
r9774 | ||
Jonathan Frederic
|
r9746 | % Document level variables | |
Jonathan Frederic
|
r9916 | \title{((( nb.metadata.name | escape_tex )))} | |
Jonathan Frederic
|
r9918 | \date{((( nb.metadata._draft.date | escape_tex )))} | |
\release{((( nb.metadata._draft.version | escape_tex )))} | |||
\author{((( nb.metadata._draft.author | escape_tex )))} | |||
\renewcommand{\releasename}{((( nb.metadata._draft.release | escape_tex )))} | |||
Jonathan Frederic
|
r9960 | ||
Jonathan Frederic
|
r9920 | % TODO: Add option for the user to specify a logo for his/her export. | |
\newcommand{\sphinxlogo}{} | |||
% Make the index page of the document. | |||
Jonathan Frederic
|
r9746 | \makeindex | |
Jonathan Frederic
|
r9960 | ||
Jonathan Frederic
|
r9921 | % Import sphinx document type specifics. | |
Jonathan Frederic
|
r9746 | ((* block sphinxheader *))((* endblock sphinxheader *)) | |
Jonathan Frederic
|
r9736 | ((* endblock header *)) | |
Jonathan Frederic
|
r9734 | ||
Jonathan Frederic
|
r9921 | %============================================================================== | |
% Body | |||
%============================================================================== | |||
Jonathan Frederic
|
r9781 | ((* block body *)) | |
Jonathan Frederic
|
r9746 | ((* block bodyBegin *)) | |
Jonathan Frederic
|
r9751 | % Body | |
Jonathan Frederic
|
r9740 | ||
Jonathan Frederic
|
r9746 | % Start of the document | |
\begin{document} | |||
Jonathan Frederic
|
r9960 | ||
Jonathan Frederic
|
r9950 | ((* if resources.sphinx.header *)) | |
\maketitle | |||
((* endif *)) | |||
Jonathan Frederic
|
r9960 | ||
Jonathan Frederic
|
r9943 | ((* block toc *)) | |
Jonathan Frederic
|
r9950 | \tableofcontents | |
Jonathan Frederic
|
r9943 | ((* endblock toc *)) | |
Jonathan Frederic
|
r9734 | ||
Jonathan Frederic
|
r9781 | ((* endblock bodyBegin *))((( super() )))((* block bodyEnd *)) | |
Jonathan Frederic
|
r9746 | ||
\renewcommand{\indexname}{Index} | |||
\printindex | |||
Jonathan Frederic
|
r9751 | ||
% End of document | |||
Jonathan Frederic
|
r9746 | \end{document} | |
((* endblock bodyEnd *)) | |||
Jonathan Frederic
|
r9781 | ((* endblock body *)) | |
Jonathan Frederic
|
r9746 | ||
Jonathan Frederic
|
r9921 | %============================================================================== | |
Jonathan Frederic
|
r9746 | % Footer | |
Jonathan Frederic
|
r9921 | %============================================================================== | |
Jonathan Frederic
|
r9736 | ((* block footer *)) | |
((* endblock footer *)) | |||
Jonathan Frederic
|
r9746 | ||
Jonathan Frederic
|
r9921 | %============================================================================== | |
% Headings | |||
% | |||
Jonathan Frederic
|
r9922 | % Purpose: Format pynb headers as sphinx headers. Depending on the Sphinx | |
% style that is active, this will change. Thus sphinx styles will | |||
% override the values here. | |||
Jonathan Frederic
|
r9921 | %============================================================================== | |
Jonathan Frederic
|
r9751 | ((* block headingcell -*)) | |
Jonathan Frederic
|
r9928 | \ | |
Jonathan Frederic
|
r9749 | ((*- if cell.level == 1 -*)) | |
Jonathan Frederic
|
r9761 | ((* block h1 -*))part((* endblock h1 -*)) | |
Jonathan Frederic
|
r9749 | ((*- elif cell.level == 2 -*)) | |
Jonathan Frederic
|
r9761 | ((* block h2 -*))chapter((* endblock h2 -*)) | |
Jonathan Frederic
|
r9749 | ((*- elif cell.level == 3 -*)) | |
Jonathan Frederic
|
r9761 | ((* block h3 -*))section((* endblock h3 -*)) | |
Jonathan Frederic
|
r9749 | ((*- elif cell.level == 4 -*)) | |
Jonathan Frederic
|
r9761 | ((* block h4 -*))subsection((* endblock h4 -*)) | |
Jonathan Frederic
|
r9749 | ((*- elif cell.level == 5 -*)) | |
Jonathan Frederic
|
r9761 | ((* block h5 -*))subsubsection((* endblock h5 -*)) | |
Jonathan Frederic
|
r9749 | ((*- elif cell.level == 6 -*)) | |
Jonathan Frederic
|
r9761 | ((* block h6 -*))paragraph((* endblock h6 -*)) | |
Jonathan Frederic
|
r9960 | ||
Jonathan Frederic
|
r9922 | ((= It's important to make sure that underscores (which tend to be common | |
in IPYNB file titles) do not make their way into latex. Sometimes this | |||
causes latex to barf. =)) | |||
Jonathan Frederic
|
r9928 | ((*- endif -*)){((( escape_underscores(cell.source | markdown2latex ) )))} | |
Jonathan Frederic
|
r9751 | ((*- endblock headingcell *)) | |
Jonathan Frederic
|
r9749 | ||
Jonathan Frederic
|
r9922 | %============================================================================== | |
% Markdown | |||
% | |||
% Purpose: Convert markdown to latex. Here markdown2latex is explicitly | |||
% called since we know we want latex output. | |||
%============================================================================== | |||
Jonathan Frederic
|
r9757 | ((*- block markdowncell scoped-*)) | |
Matthias BUSSONNIER
|
r9809 | ((( cell.source | markdown2latex ))) | |
Jonathan Frederic
|
r9757 | ((*- endblock markdowncell -*)) | |
Jonathan Frederic
|
r9922 | %============================================================================== | |
% Rawcell | |||
% | |||
% Purpose: Raw text cells allow the user to manually inject document code that | |||
% will not get touched by the templating system. | |||
%============================================================================== | |||
Jonathan Frederic
|
r9761 | ((*- block rawcell *)) | |
Jonathan Frederic
|
r9803 | ((( cell.source | wrap(wrap_size) ))) | |
Jonathan Frederic
|
r9761 | ((* endblock rawcell -*)) | |
Jonathan Frederic
|
r9922 | %============================================================================== | |
% Unknowncell | |||
% | |||
% Purpose: This is the catch anything unhandled. To display this data, we | |||
% remove all possible latex conflicts and wrap the characters so they | |||
% can't flow off of the page. | |||
%============================================================================== | |||
((* block unknowncell scoped*)) | |||
% Unsupported cell type, no formatting | |||
((( cell.source | wrap | escape_tex ))) | |||
((* endblock unknowncell *)) | |||
%============================================================================== | |||
% Input | |||
%============================================================================== | |||
Jonathan Frederic
|
r9781 | ((* block input *)) | |
Jonathan Frederic
|
r9943 | ||
% Make sure that atleast 4 lines are below the HR | |||
\needspace{((( min_header_lines )))\baselineskip} | |||
Jonathan Frederic
|
r9960 | ||
Jonathan Frederic
|
r9939 | ((* if resources.sphinx.outputstyle == 'simple' *)) | |
% Add a horizantal break, along with break title. | |||
\vspace{10pt} | |||
{\scriptsize Input}\\* | |||
\rule[10pt]{\linewidth}{0.5pt} | |||
\vspace{-25pt} | |||
% Add contents below. | |||
((( cell.input | highlight ))) | |||
Jonathan Frederic
|
r9960 | ||
Jonathan Frederic
|
r9939 | ((* elif resources.sphinx.outputstyle == 'notebook' *)) | |
Jonathan Frederic
|
r10035 | \vspace{8pt} | |
\makebox[0.1\linewidth]{\hfill\tt\color{nbframe-in-prompt}In{[}((( cell.prompt_number ))){]}:}\\* | |||
\vspace{-3pt} | |||
\vspace{-2.55\baselineskip} | |||
Jonathan Frederic
|
r9940 | \begin{ColorVerbatim} | |
Jonathan Frederic
|
r10035 | \vspace{-0.6\baselineskip} | |
Jonathan Frederic
|
r9939 | ((( cell.input | highlight ))) | |
\end{ColorVerbatim} | |||
((* endif *)) | |||
Jonathan Frederic
|
r9781 | ((* endblock input *)) | |
Jonathan Frederic
|
r9922 | %============================================================================== | |
Jonathan Frederic
|
r9925 | % Output_Group | |
Jonathan Frederic
|
r9922 | % | |
Jonathan Frederic
|
r9925 | % Purpose: Make sure that only one header bar only attaches to the output | |
% once. By keeping track of when an input group is started | |||
Jonathan Frederic
|
r9922 | %============================================================================== | |
Jonathan Frederic
|
r9928 | ((* block output_group *)) | |
Jonathan Frederic
|
r9943 | ((* if cell.outputs.__len__() > 0 *)) | |
((* if resources.sphinx.outputstyle == 'simple' *)) | |||
Jonathan Frederic
|
r9960 | ||
Jonathan Frederic
|
r9943 | % If the first block is an image, minipage the image. Else | |
% request a certain amount of space for the input text. | |||
((( iff_figure(cell.outputs[0], "\\begin{minipage}{1.0\\textwidth}", "\\needspace{" ~ min_header_lines ~ "\\baselineskip}") ))) | |||
Jonathan Frederic
|
r9960 | ||
Jonathan Frederic
|
r9943 | % Add a horizantal break, along with break title. | |
\vspace{10pt} | |||
{\scriptsize Output}\\* | |||
\rule[10pt]{\linewidth}{0.5pt} | |||
\vspace{-20pt} | |||
% Add the contents of the first block. | |||
((( render_output(cell.outputs[0]) ))) | |||
% Close the minipage. | |||
((( iff_figure(cell.outputs[0], "\\end{minipage}", "") ))) | |||
% Add remainer of the document contents below. | |||
((* for output in cell.outputs[1:] *)) | |||
Jonathan Frederic
|
r10035 | ((( render_output(output, cell.prompt_number) ))) | |
Jonathan Frederic
|
r9940 | ((* endfor *)) | |
Jonathan Frederic
|
r9943 | ((* elif resources.sphinx.outputstyle == 'notebook' *)) | |
Jonathan Frederic
|
r9960 | ||
Jonathan Frederic
|
r9943 | % Add document contents. | |
Jonathan Frederic
|
r10035 | ((* for output in cell.outputs *)) | |
((( render_output(output, cell.prompt_number) ))) | |||
((* endfor *)) | |||
Jonathan Frederic
|
r9943 | ((* endif *)) | |
Jonathan Frederic
|
r9939 | ((* endif *)) | |
Jonathan Frederic
|
r9925 | ((* endblock *)) | |
Jonathan Frederic
|
r9781 | ||
Jonathan Frederic
|
r9922 | %============================================================================== | |
Jonathan Frederic
|
r9925 | % Additional formating | |
Jonathan Frederic
|
r9922 | %============================================================================== | |
Jonathan Frederic
|
r9781 | ((* block data_text *)) | |
Jonathan Frederic
|
r9928 | ((( custom_verbatim(output.text) ))) | |
Jonathan Frederic
|
r9781 | ((* endblock *)) | |
Jonathan Frederic
|
r9925 | ((* block traceback_line *)) | |
Jonathan Frederic
|
r9952 | ((( center_output(line | indent| rm_ansi) ))) | |
Jonathan Frederic
|
r9925 | ((* endblock traceback_line *)) | |
Jonathan Frederic
|
r9922 | %============================================================================== | |
% Supported image formats | |||
%============================================================================== | |||
Jonathan Frederic
|
r9781 | ((*- block data_png -*)) | |
Jonathan Frederic
|
r9952 | ((( center_output(insert_graphics(output.key_png)) ))) | |
Jonathan Frederic
|
r9781 | ((*- endblock -*)) | |
((*- block data_svg -*)) | |||
Jonathan Frederic
|
r9952 | ((( center_output(insert_graphics(output.key_svg)) ))) | |
Jonathan Frederic
|
r9781 | ((*- endblock -*)) | |
Jonathan Frederic
|
r10035 | ((*- block data_latex *)) | |
\vspace{-1\baselineskip} | |||
((* if resources.sphinx.centeroutput *))\begin{center}((* endif -*))((( output.latex | rm_math_space )))((*- if resources.sphinx.centeroutput *))\end{center} ((* endif -*)) | |||
Jonathan Frederic
|
r9947 | ((*- endblock -*)) | |
Jonathan Frederic
|
r9943 | ||
Jonathan Frederic
|
r9922 | %============================================================================== | |
% Support Macros | |||
%============================================================================== | |||
Jonathan Frederic
|
r9929 | ||
% Name: render_output | |||
% Purpose: Renders an output block appropriately. | |||
Jonathan Frederic
|
r10035 | ((* macro render_output(output, prompt_number) -*)) | |
Jonathan Frederic
|
r9943 | ((*- if output.output_type == 'pyerr' -*)) | |
((*- block pyerr scoped *)) | |||
Jonathan Frederic
|
r9960 | ((( custom_verbatim(super()) ))) | |
Jonathan Frederic
|
r9943 | ((* endblock pyerr -*)) | |
((*- else -*)) | |||
Jonathan Frederic
|
r10035 | ||
((* if resources.sphinx.outputstyle == 'notebook' *)) | |||
((*- if output.output_type == 'pyout' -*)) | |||
\makebox[0.1\linewidth]{\hfill\tt\color{nbframe-out-prompt}Out{[}((( prompt_number ))){]}:}\\* | |||
\vspace{-2.55\baselineskip} | |||
((*- endif -*)) | |||
\begin{InvisibleVerbatim} | |||
\vspace{-0.5\baselineskip} | |||
((*- endif -*)) | |||
Jonathan Frederic
|
r9928 | ((*- block display_data scoped -*)) | |
((( super() ))) | |||
((*- endblock display_data -*)) | |||
Jonathan Frederic
|
r10035 | ||
((* if resources.sphinx.outputstyle == 'notebook' *)) | |||
\end{InvisibleVerbatim} | |||
((*- endif -*)) | |||
Jonathan Frederic
|
r9928 | ((*- endif -*)) | |
Jonathan Frederic
|
r9922 | ((*- endmacro *)) | |
Jonathan Frederic
|
r9929 | % Name: iff_figure | |
% Purpose: If the output block provided is a figure type, the 'true_content' | |||
% parameter will be returned. Else, the 'false_content'. | |||
((* macro iff_figure(output, true_content, false_content) -*)) | |||
Jonathan Frederic
|
r9944 | ((*- set is_figure = false -*)) | |
((*- for type in output | filter_data_type -*)) | |||
Jonathan Frederic
|
r9945 | ((*- if type in ['pdf', 'svg', 'png', 'jpeg','html']*)) | |
Jonathan Frederic
|
r9944 | ((*- set is_figure = true -*)) | |
((*- endif -*)) | |||
((*- endfor -*)) | |||
((* if is_figure -*)) | |||
Jonathan Frederic
|
r9929 | ((( true_content ))) | |
((*- else -*)) | |||
((( false_content ))) | |||
((*- endif *)) | |||
((*- endmacro *)) | |||
% Name: custom_verbatim | |||
% Purpose: This macro creates a verbatim style block that fits the existing | |||
% sphinx style more readily than standard verbatim blocks. | |||
Jonathan Frederic
|
r9928 | ((* macro custom_verbatim(text) -*)) | |
Jonathan Frederic
|
r9963 | \begin{alltt} | |
((*- if resources.sphinx.centeroutput *))\begin{center} ((* endif -*)) | |||
Jonathan Frederic
|
r9961 | ((( text | wrap(wrap_size) ))) | |
Jonathan Frederic
|
r9963 | ((*- if resources.sphinx.centeroutput *))\end{center}((* endif -*)) | |
\end{alltt} | |||
Jonathan Frederic
|
r9922 | ((*- endmacro *)) | |
Jonathan Frederic
|
r9950 | % Name: center_output | |
% Purpose: This macro centers the output if the output centering is enabled. | |||
((* macro center_output(text) -*)) | |||
Jonathan Frederic
|
r9959 | ((* if resources.sphinx.centeroutput *)){\centering ((* endif *))((( text )))((* if resources.sphinx.centeroutput *))}((* endif *)) | |
Jonathan Frederic
|
r9950 | ((*- endmacro *)) | |
Jonathan Frederic
|
r9929 | % Name: insert_graphics | |
% Purpose: This macro will insert an image in the latex document given a path. | |||
Jonathan Frederic
|
r9928 | ((* macro insert_graphics(path) -*)) | |
Jonathan Frederic
|
r9922 | \begin{center} | |
Jonathan Frederic
|
r10124 | \includegraphics[max size={\textwidth}{\textheight}]{(((path)))} | |
Jonathan Frederic
|
r9922 | \par | |
\end{center} | |||
((*- endmacro *)) | |||
Jonathan Frederic
|
r9929 | % Name: escape_underscores | |
% Purpose: Underscores cause a problem in latex. It's important that we | |||
% escape any underscores that appear. | |||
Jonathan Frederic
|
r9928 | ((* macro escape_underscores(text) -*)) | |
Jonathan Frederic
|
r9781 | ((*- set text = text|replace("_","\\_") -*)) | |
((( text ))) | |||
Jonathan Frederic
|
r9948 | ((*- endmacro *)) |