diff --git a/src/mathrendertask.cpp b/src/mathrendertask.cpp --- a/src/mathrendertask.cpp +++ b/src/mathrendertask.cpp @@ -33,21 +33,21 @@ #include "lib/renderer.h" #include "lib/latexrenderer.h" -static const QLatin1String mathTex("\\documentclass%9{standalone}"\ +static const QLatin1String mathTex("\\documentclass%9{minimal}"\ "\\usepackage{amsfonts,amssymb}"\ "\\usepackage{amsmath}"\ "\\usepackage[utf8]{inputenc}"\ + "\\usepackage[active,displaymath,textmath,tightpage]{preview}"\ "\\usepackage{color}"\ - /* - "\\setlength\\textwidth{5in}"\ - "\\setlength{\\parindent}{0pt}"\ - "\\pagestyle{empty}"\ - */ "\\begin{document}"\ - "\\pagecolor[rgb]{%1,%2,%3}"\ + "\\begin{preview}"\ + "$"\ + "\\colorbox[rgb]{%1,%2,%3}{"\ "\\color[rgb]{%4,%5,%6}"\ "\\fontsize{%7}{%7}\\selectfont"\ - "%8"\ + "%8}"\ + "$"\ + "\\end{preview}" "\\end{document}"); static const QLatin1String eqnHeader("$\\displaystyle %1$"); @@ -82,23 +82,23 @@ QTemporaryFile texFile(tempDir + QDir::separator() + QLatin1String("cantor_tex-XXXXXX.tex")); texFile.open(); - // Verify that standalone.cls available for rendering and could be founded - if (!tempDir.contains(QLatin1String("standalone.cls"))) + // make sure we have preview.sty available + if (!tempDir.contains(QLatin1String("preview.cls"))) { - QString file = QStandardPaths::locate(QStandardPaths::AppDataLocation, QLatin1String("latex/standalone.cls")); + QString file = QStandardPaths::locate(QStandardPaths::AppDataLocation, QLatin1String("latex/preview.sty")); if (file.isEmpty()) - file = QStandardPaths::locate(QStandardPaths::GenericDataLocation, QLatin1String("cantor/latex/standalone.cls")); + file = QStandardPaths::locate(QStandardPaths::GenericDataLocation, QLatin1String("cantor/latex/preview.sty")); if (file.isEmpty()) { result->successful = false; - result->errorMessage = QString::fromLatin1("needed for math render standalone.cls file not found in Cantor data directory"); + result->errorMessage = QString::fromLatin1("LaTeX style file preview.sty not found."); finalize(result); return; } else - QFile::copy(file, tempDir + QDir::separator() + QLatin1String("standalone.cls")); + QFile::copy(file, tempDir + QDir::separator() + QLatin1String("preview.sty")); } QString expressionTex=mathTex; diff --git a/thirdparty/CMakeLists.txt b/thirdparty/CMakeLists.txt --- a/thirdparty/CMakeLists.txt +++ b/thirdparty/CMakeLists.txt @@ -29,4 +29,4 @@ add_dependencies(Discount::Lib discount_project-build) # preview.sty -install(FILES standalone.cls DESTINATION ${KDE_INSTALL_DATADIR}/cantor/latex) +install(FILES preview.sty DESTINATION ${KDE_INSTALL_DATADIR}/cantor/latex) diff --git a/thirdparty/README.md b/thirdparty/README.md --- a/thirdparty/README.md +++ b/thirdparty/README.md @@ -14,7 +14,15 @@ * Better recognition of the mathematical expressions between $...$, $$...$$ -## standalone.cls -This file provides the LaTeX class and package 'standalone' ([link](https://ctan.org/tex-archive/macros/latex/contrib/standalone)), -which allows TeX pictures or other TeX code in sub-files to be compiled standalone or as part of a main document. -This package is used for the rendering of mathematical LaTeX expressions embedded in the Cantor's worksheet. +## preview.sty +This file provides the LaTeX style 'preview' ([link](https://www.ctan.org/tex-archive/macros/latex/contrib/preview)). + +The main purpose of the preview package is the extraction of selected +elements from a LaTeX source, like formulas or graphics, into separate +pages of a DVI file. A flexible and convenient interface allows it to +specify what commands and constructs should be extracted. This works +with DVI files postprocessed by either Dvips and Ghostscript or +dvipng, but it also works when you are using PDFTeX for generating PDF +files. + +This package is used for the rendering of mathematical LaTeX expressions embedded in Cantor's worksheet. diff --git a/thirdparty/preview.sty b/thirdparty/preview.sty new file mode 100644 --- /dev/null +++ b/thirdparty/preview.sty @@ -0,0 +1,392 @@ +%% +%% This is file `preview.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% preview.dtx (with options: `style') +%% preview.dtx (with options: `style,active') +%% +%% IMPORTANT NOTICE: +%% +%% For the copyright see the source file. +%% +%% Any modified versions of this file must be renamed +%% with new filenames distinct from preview.sty. +%% +%% For distribution of the original source see the terms +%% for copying and modification in the file preview.dtx preview.dtx. +%% +%% This generated file may be distributed as long as the +%% original source files, as listed above, are part of the +%% same distribution. (The sources need not necessarily be +%% in the same archive or directory.) +%% The preview style for extracting previews from LaTeX documents. +%% Developed as part of AUCTeX . +\NeedsTeXFormat{LaTeX2e} \def\reserved@a #1#2$#3: +#4${\xdef#1{\reserved@c #2#4 $}} \def\reserved@c #1 #2${#1} +\begingroup \catcode`\_=12 +\reserved@a\pr@version $Name: release_11_90 $ \ifx\pr@version\@empty +\reserved@a\pr@version CVS-$Revision: 1.126 $ \endgroup \else + \def\next release_{} \lccode`\_=`. + \edef\next{\lowercase{\endgroup + \def\noexpand\pr@version{\expandafter\next\pr@version}}} \next \fi +\reserved@a\next $Date: 2017/04/24 13:20:00 $ +\edef\next{\noexpand\ProvidesPackage{preview}% + [\next\space \pr@version\space (AUCTeX/preview-latex)]} +\next +\let\ifPreview\iffalse +\let\preview@delay=\@gobble +\let\pr@advise=\@gobbletwo +\long\def\pr@advise@ship#1#2#3{} +\def\pr@loadcfg#1{\InputIfFileExists{#1.cfg}{}{}} +\IfFileExists{luatex85.sty}{\RequirePackage{luatex85}}{} +\DeclareOption{noconfig}{\let\pr@loadcfg=\@gobble} +\long\def\pr@addto@front#1#2{% + \toks@{#2}\toks@\expandafter{\the\expandafter\toks@#1}% + \xdef#1{\the\toks@}} +\DeclareOption{active}{% + \let\ifPreview\iftrue + \def\pr@advise#1{% + \expandafter\pr@adviseii\csname pr@\string#1\endcsname#1}% + \long\def\pr@advise@ship#1#2#3{\pr@advise#1{\pr@protect@ship{#2}{#3}}}% + \let\preview@delay\@firstofone} +\long\def\pr@adviseii#1#2#3{\preview@delay{% + \ifx#1\relax \let#1#2\fi + \toks@{#3#1}% + \ifx\@undefined\protected \else \protected\fi + \long\edef#2{\the\toks@}}} +\DeclareOption{delayed}{% + \ifPreview \def\preview@delay{\AtBeginDocument}\fi +} +\newif\ifpr@fixbb +\pr@fixbbfalse +\DeclareOption{psfixbb}{\ifPreview% + \pr@fixbbtrue + \newbox\pr@markerbox + \setbox\pr@markerbox\hbox{\special{psfile=/dev/null}}\fi +} +\let\pr@graphicstype=\z@ +\DeclareOption{dvips}{% + \let\pr@graphicstype\@ne + \preview@delay{\AtBeginDvi{% + \special{!/preview@version(\pr@version)def} + \special{!userdict begin/preview-bop-level 0 def% + /bop-hook{/preview-bop-level dup load dup 0 le{/isls false def% + /vsize 792 def/hsize 612 def}if 1 add store}bind def% + /eop-hook{/preview-bop-level dup load dup 0 gt{1 sub}if + store}bind def end}}}} +\DeclareOption{pdftex}{% + \let\pr@graphicstype\tw@} +\DeclareOption{xetex}{% + \let\pr@graphicstype\thr@@} +\begingroup +\catcode`\*=11 +\@firstofone{\endgroup +\DeclareOption{displaymath}{% + \preview@delay{\toks@{% + \pr@startbox{\noindent$$% + \aftergroup\pr@endbox\@gobbletwo}{$$}\@firstofone}% + \everydisplay\expandafter{\the\expandafter\toks@ + \expandafter{\the\everydisplay}}}% + \pr@advise@ship\equation{\begingroup\aftergroup\pr@endbox + \def\dt@ptrue{\m@ne=\m@ne}\noindent}% + {\endgroup}% + \pr@advise@ship\equation*{\begingroup\aftergroup\pr@endbox + \def\dt@ptrue{\m@ne=\m@ne}\noindent}% + {\endgroup}% + \PreviewOpen[][\def\dt@ptrue{\m@ne=\m@ne}\noindent#1]\[% + \PreviewClose\]% + \PreviewEnvironment[][\noindent#1]{eqnarray}% + \PreviewEnvironment[][\noindent#1]{eqnarray*}% + \PreviewEnvironment{displaymath}% +}} +\begingroup +\def\next#1#2{% + \endgroup + \DeclareOption{textmath}{% + \PreviewEnvironment{math}% + \preview@delay{\ifx#1\@undefined \let#1=$%$ + \fi\catcode`\$=\active + \ifx\xyreuncatcodes\@undefined\else + \edef\next{\catcode`@=\the\catcode`@\relax}% + \makeatother\expandafter\xyreuncatcodes\next\fi}% + \pr@advise@ship\(\pr@endaftergroup{}% \) + \pr@advise@ship#1{\@firstoftwo{\let#1=#2% + \futurelet\reserved@a\pr@textmathcheck}}{}}% + \def\pr@textmathcheck{\expandafter\pr@endaftergroup + \ifx\reserved@a#1{#2#2}\expandafter\@gobbletwo\fi#2}} +\lccode`\~=`\$ +\lowercase{\expandafter\next\expandafter~}% + \csname pr@\string$%$ + \endcsname +\DeclareOption{graphics}{% + \PreviewMacro[*[[!]{\includegraphics}%]] +} +\def\pr@floatfix#1#2{\ifx#1#2% + \ifx#1\@undefined\else + \PackageWarningNoLine{preview}{% +Your document class has a bad definition^^J +of \string#1, most likely^^J +\string\let\string#1=\string#2^^J +which has now been changed to^^J +\string\def\string#1{\string#2}^^J +because otherwise subsequent changes to \string#2^^J +(like done by several packages changing float behaviour)^^J +can't take effect on \string#1.^^J +Please complain to your document class author}% + \def#1{#2}\fi\fi} +\begingroup +\def\next#1#2{\endgroup + \DeclareOption{floats}{% + \pr@floatfix\endfigure\end@float + \pr@floatfix\endtable\end@float + \pr@floatfix#1\end@dblfloat + \pr@floatfix#2\end@dblfloat + \PreviewSnarfEnvironment[![]{@float}%] + \PreviewSnarfEnvironment[![]{@dblfloat}%] + }} +\expandafter\next\csname endfigure*\expandafter\endcsname + \csname endtable*\endcsname +\DeclareOption{sections}{% + \PreviewMacro[!!!!!!*[[!]{\@startsection}%]] + \PreviewMacro[*[[!]{\chapter}%]] +} +\DeclareOption* + {\InputIfFileExists{pr\CurrentOption.def}{}{\OptionNotUsed}} +\def\PreviewMacro{\@ifstar\pr@starmacro\pr@macro} +\long\def\pr@domacro#1#2{% + \long\def\next##1{#2}% + \pr@callafter\next#1]\pr@endparse} +\newcommand\pr@macro[1][]{% + \toks@{\pr@domacro{#1}}% + \long\edef\next[##1]##2{% + \noexpand\pr@advise@ship{##2}{\the\toks@{##1\noexpand\pr@endbox}}{}}% + \@ifnextchar[\next\pr@macroii} +\def\pr@macroii{\next[##1]} +\long\def\pr@endmacro#1{#1\pr@endbox} +\long\def\pr@protect@domacro#1#2{\pr@protect{% + \long\def\next##1{#2}% + \pr@callafter\next#1]\pr@endparse}} +\newcommand\pr@starmacro[1][]{\toks@{\pr@protect@domacro{#1}}% + \long\edef\next[##1]##2{% + \noexpand\pr@advise##2{\the\toks@{##1}}}% + \@ifnextchar[\next{\next[]}} +\def\PreviewOpen{\@ifstar\pr@starmacro\pr@open} +\newcommand\pr@open[1][]{% + \toks@{\pr@domacro{#1}}% + \long\edef\next[##1]##2{% + \noexpand\pr@advise##2{\begingroup + \noexpand\pr@protect@ship + {\the\toks@{\begingroup\aftergroup\noexpand\pr@endbox##1}}% + {\endgroup}}}% + \@ifnextchar[\next\pr@macroii} +\def\PreviewClose{\@ifstar\pr@starmacro\pr@close} +\newcommand\pr@close[1][]{% + \toks@{\pr@domacro{#1}}% + \long\edef\next[##1]##2{% + \noexpand\pr@advise{##2}{\the\toks@{##1\endgroup}}}% + \@ifnextchar[\next\pr@macroii} +\def\PreviewEnvironment{\@ifstar\pr@starenv\pr@env} +\newcommand\pr@starenv[1][]{\toks@{\pr@starmacro[{#1}]}% + \long\edef\next##1##2{% + \the\toks@[{##2}]##1}% + \begingroup\pr@starenvii} +\newcommand\pr@starenvii[2][]{\endgroup + \expandafter\next\csname#2\endcsname{#1}% + \expandafter\pr@starmacro\csname end#2\endcsname} +\newcommand\pr@env[1][]{% + \toks@{\pr@domacro{#1}}% + \long\edef\next[##1]##2{% + \noexpand\expandafter\noexpand\pr@advise@ship + \noexpand\csname##2\noexpand\endcsname{\the\toks@ + {\begingroup\aftergroup\noexpand\pr@endbox##1}}{\endgroup}}% + \@ifnextchar[\next\pr@macroii %] + } +\newcommand{\PreviewSnarfEnvironment}[2][]{% + \expandafter\pr@advise + \csname #2\endcsname{\pr@snarfafter{#1}}% + \expandafter\pr@advise + \csname end#2\endcsname{\pr@endsnarf}} +\let\pr@ship@start\@empty +\let\pr@ship@end\@empty +\newenvironment{preview}{\ignorespaces}{\ifhmode\unskip\fi} +\newenvironment{nopreview}{\ignorespaces}{\ifhmode\unskip\fi} +\ProcessOptions\relax +\ifPreview\else\expandafter\endinput\fi +%% The preview style for extracting previews from LaTeX documents. +%% Developed as part of AUCTeX . +\newif\ifpr@outer +\pr@outertrue +\newcount\pr@snippet +\global\pr@snippet=1 +\def\pr@protect{\ifx\protect\@typeset@protect + \ifpr@outer \expandafter\expandafter\expandafter + \@secondoftwo\fi\fi\@gobble} +\def\pr@protect@ship{\pr@protect{\@firstoftwo\pr@startbox}% + \@gobbletwo} +\def\pr@insert{\begingroup\afterassignment\pr@insertii\count@} +\def\pr@insertii{\endgroup\setbox\pr@box\vbox} +\def\pr@mark{{\afterassignment}\toks@} +\def\pr@marks{{\aftergroup\pr@mark\afterassignment}\count@} +\newbox\pr@box +\long\def\pr@startbox#1#2{% + \ifpr@outer + \toks@{#2}% + \edef\pr@cleanup{\the\toks@}% + \setbox\pr@box\vbox\bgroup + \break + \pr@outerfalse\@arrayparboxrestore + \let\insert\pr@insert + \let\mark\pr@mark + \let\marks\pr@marks + \expandafter\expandafter\expandafter + \pr@ship@start + \expandafter\@firstofone + \else + \expandafter \@gobble + \fi{#1}} +\def\pr@endbox{% + \let\reserved@a\relax + \ifvmode \edef\reserved@a{\the\everypar}% + \ifx\reserved@a\@empty\else + \dimen@\prevdepth + \noindent\par + \setbox\z@\lastbox\unskip\unpenalty + \prevdepth\dimen@ + \setbox\z@\hbox\bgroup\penalty-\maxdimen\unhbox\z@ + \ifnum\lastpenalty=-\maxdimen\egroup + \else\egroup\box\z@ \fi\fi\fi + \ifhmode \par\unskip\setbox\z@\lastbox + \nointerlineskip\hbox{\unhbox\z@\/}% + \else \unskip\unpenalty\unskip \fi + \egroup + \setbox\pr@box\vbox{% + \baselineskip\z@skip \lineskip\z@skip \lineskiplimit\z@ + \@begindvi + \nointerlineskip + \splittopskip\z@skip\setbox\z@\vsplit\pr@box to\z@ + \unvbox\z@ + \nointerlineskip + %\color@setgroup + \box\pr@box + %\color@endgroup + }% + \pr@ship@end + {\let\protect\noexpand + \ifx\pr@offset@override\@undefined + \voffset=-\ht\pr@box + \hoffset=\z@ + \fi + \c@page=\pr@snippet + \pr@shipout + \ifpr@fixbb\hbox{% + \dimen@\wd\pr@box + \@tempdima\ht\pr@box + \@tempdimb\dp\pr@box + \box\pr@box + \llap{\raise\@tempdima\copy\pr@markerbox\kern\dimen@}% + \lower\@tempdimb\copy\pr@markerbox}% + \else \box\pr@box \fi}% + \global\advance\pr@snippet\@ne + \pr@cleanup +} +\let\pr@shipout=\shipout +\def\shipout{\deadcycles\z@\bgroup\setbox\z@\box\voidb@x + \afterassignment\pr@shipoutegroup\setbox\z@} +\def\pr@shipoutegroup{\ifvoid\z@ \expandafter\aftergroup\fi \egroup} +\def\pr@parseit#1{\csname pr@parse#1\endcsname} +\let\pr@endparse=\@percentchar +\def\next#1{% +\def\pr@callafter{% + \afterassignment\pr@parseit + \let#1= }} +\expandafter\next\csname pr@parse\pr@endparse\endcsname +\long\expandafter\def\csname pr@parse*\endcsname#1\pr@endparse#2{% + \begingroup\toks@{#1\pr@endparse{#2}}% + \edef\next##1{\endgroup##1\the\toks@}% + \@ifstar{\next{\pr@parse@*}}{\next\pr@parseit}} +\long\expandafter\def\csname pr@parse[\endcsname#1\pr@endparse#2{% + \begingroup\toks@{#1\pr@endparse{#2}}% + \edef\next##1{\endgroup##1\the\toks@}% + \@ifnextchar[{\next\pr@bracket}{\next\pr@parseit}} +\long\def\pr@bracket#1\pr@endparse#2[#3]{% + \pr@parseit#1\pr@endparse{#2[{#3}]}} +\expandafter\let\csname pr@parse]\endcsname=\pr@parseit +\long\def\pr@parse#1\pr@endparse#2#3{% + \pr@parseit#1\pr@endparse{#2{#3}}} +\expandafter\let\csname pr@parse!\endcsname=\pr@parse +\long\expandafter\def\csname pr@parse?\endcsname#1#2\pr@endparse#3{% + \begingroup\toks@{#2\pr@endparse{#3}}% + \@ifnextchar#1{\pr@parsecond\@firstoftwo}% + {\pr@parsecond\@secondoftwo}} +\def\pr@parsecond#1{\expandafter\endgroup + \expandafter\expandafter\expandafter\pr@parseit + \expandafter#1\the\toks@} + \long\def\pr@parse@#1#2\pr@endparse#3{% + \pr@parseit #2\pr@endparse{#3#1}} +\long\expandafter\def\csname pr@parse-\endcsname + #1\pr@endparse#2{\begingroup + \toks@{\endgroup\pr@parseit #1\pr@endparse{#2}}% + {\aftergroup\the\aftergroup\toks@ \afterassignment}% + \let\next= } +\long\expandafter\def\csname pr@parse:\endcsname + #1#2#3\pr@endparse#4{\begingroup + \toks@{\endgroup \pr@parseit#3\pr@endparse{#4}}% + \long\def\next#1{#2}% + \the\expandafter\toks@\next} +\long\expandafter\def\csname pr@parse#\endcsname + #1#2#3\pr@endparse#4{\begingroup + \toks@{#4}% + \long\edef\next##1{\toks@{\the\toks@##1}}% + \toks@{\endgroup \pr@parseit#3\pr@endparse}% + \long\def\reserved@a#1{{#2}}% + \the\expandafter\next\reserved@a} +\def\pr@endaftergroup#1{#1\aftergroup\pr@endbox} +\let\pr@endsnarf\relax +\long\def\pr@snarfafter#1{\ifpr@outer + \pr@ship@start + \let\pr@ship@start\relax + \let\pr@endsnarf\endgroup + \else + \let\pr@endsnarf\relax + \fi + \pr@protect{\pr@callafter\pr@startsnarf#1]\pr@endparse}} +\def\pr@startsnarf#1{#1\begingroup + \pr@startbox{\begingroup\aftergroup\pr@endbox}{\endgroup}% + \ignorespaces} +\renewenvironment{preview}{\begingroup + \pr@startbox{\begingroup\aftergroup\pr@endbox}% + {\endgroup}% + \ignorespaces}% + {\ifhmode\unskip\fi\endgroup} +\renewenvironment{nopreview}{\pr@outerfalse\ignorespaces}% + {\ifhmode\unskip\fi} +\newtoks\pr@output +\pr@output\output +\output{% + \pr@outerfalse + \let\@begindvi\@empty + \the\pr@output} +\let\output\pr@output +\def\pr@typeinfos{\typeout{Preview: Fontsize \f@size pt}% + \ifnum\mag=\@m\else\typeout{Preview: Magnification \number\mag}\fi + \ifx\pdfoutput\@undefined + \ifx\XeTeXversion\@undefined \else + % FIXME: The message should not be emitted if XeTeX does not produce + % PDF. There does not seem to be a primitive for that, though. + \typeout{Preview: PDFoutput 1}% + \fi + \else + \ifx\pdfoutput\relax \else + \ifnum\pdfoutput>\z@ + \typeout{Preview: PDFoutput 1}% + \fi + \fi + \fi +} +\AtBeginDocument{\pr@typeinfos} +\pr@loadcfg{prdefault} +\endinput +%% +%% End of file `preview.sty'. diff --git a/thirdparty/standalone.cls b/thirdparty/standalone.cls deleted file mode 100644 --- a/thirdparty/standalone.cls +++ /dev/null @@ -1,954 +0,0 @@ -%% Copyright (C) 2011-2012 by Martin Scharrer -%% --------------------------------------------------------------------------- -%% This work may be distributed and/or modified under the -%% conditions of the LaTeX Project Public License, either version 1.3 -%% of this license or (at your option) any later version. -%% The latest version of this license is in -%% http://www.latex-project.org/lppl.txt -%% and version 1.3 or later is part of all distributions of LaTeX -%% version 2005/12/01 or later. -%% -%% This work has the LPPL maintenance status `maintained'. -%% -%% The Current Maintainer of this work is Martin Scharrer. -%% -%% This work consists of the files standalone.dtx and standalone.ins -%% and the derived filebase standalone.sty, standalone.cls and -%% standalone.cfg. -%% -\NeedsTeXFormat{LaTeX2e} -\ProvidesClass{standalone}[% - 2015/07/15 - v1.2 - Class to compile TeX sub-files standalone] -\newif\ifstandalone -\standalonetrue -\newif\ifstandalonebeamer -\standalonebeamerfalse -\let\onlyifstandalone\@firstofone -\let\IfStandalone\@firstoftwo -\def\sa@border@left{0.50001bp} -\let\sa@border@right\sa@border@left -\let\sa@border@top\sa@border@left -\let\sa@border@bottom\sa@border@left -\def\rem@bp#1bp\relax#2\@nnil{#1}% -\def\default@bp#1#2{% - \begingroup - \afterassignment\remove@to@nnil - \dimen@ #2bp\relax\@nnil - \expandafter - \endgroup - \expandafter - \def\expandafter#1\expandafter{\the\dimen@}% -} -\def\sa@readborder#1 #2 #3 #4 #5\@nnil{% - \ifx\\#2#3#4\\% - \default@bp\sa@border@left{#1}% - \let\sa@border@right\sa@border@left - \let\sa@border@top\sa@border@left - \let\sa@border@bottom\sa@border@left - \else - \ifx\\#4\\% - \default@bp\sa@border@left{#1}% - \let\sa@border@right\sa@border@left - \default@bp\sa@border@top{#2}% - \let\sa@border@bottom\sa@border@top - \else - \default@bp\sa@border@left{#1}% - \default@bp\sa@border@bottom{#2}% - \default@bp\sa@border@right{#3}% - \default@bp\sa@border@top{#4}% - \fi\fi -}% -\expandafter\ifx\csname ifluatex\endcsname\relax - \IfFileExists{ifluatex.sty}{\@firstoftwo}{\@secondoftwo}{% - \RequirePackage{ifluatex} - }{ - \begingroup - \expandafter\ifx\csname directlua\endcsname\relax - \endgroup - \expandafter\let\csname ifluatex\expandafter\endcsname\csname iffalse\endcsname - \else - \endgroup - \expandafter\let\csname ifluatex\expandafter\endcsname\csname iftrue\endcsname - \fi - } -\fi -\expandafter\ifx\csname ifpdf\endcsname\relax - \IfFileExists{ifpdf.sty}{\@firstoftwo}{\@secondoftwo}{% - \RequirePackage{ifpdf} - }{ - \begingroup - \expandafter\ifx\csname pdfoutput\endcsname\relax - \endgroup - \expandafter\let\csname ifpdf\expandafter\endcsname\csname iffalse\endcsname - \else - \endgroup - \ifnum\pdfoutput<1 - \expandafter\let\csname ifpdf\expandafter\endcsname\csname iffalse\endcsname - \else - \expandafter\let\csname ifpdf\expandafter\endcsname\csname iftrue\endcsname - \fi - \fi - } -\fi -\expandafter\ifx\csname ifxetex\endcsname\relax - \IfFileExists{ifxetex.sty}{\@firstoftwo}{\@secondoftwo}{% - \RequirePackage{ifxetex} - }{ - \begingroup - \expandafter\ifx\csname XeTeXrevision\endcsname\relax - \endgroup - \expandafter\let\csname ifxetex\expandafter\endcsname\csname iffalse\endcsname - \else - \endgroup - \expandafter\let\csname ifxetex\expandafter\endcsname\csname iftrue\endcsname - \fi - } -\fi -\let\sa@classoptionslist\@classoptionslist -\RequirePackage{xkeyval} -\newif\ifsa@preview -\newif\ifsa@crop -\newif\ifsa@multi -\newif\ifsa@multido -\newif\ifsa@varwidth -\newif\ifsa@ignorerest -\newif\ifsa@ignoreempty -\newif\ifsa@tikz -\newif\ifsa@pstricks -\newif\ifsa@convert -\newif\ifsa@float -\newif\ifsa@math -\let\sa@beamertrue\standalonebeamertrue -\let\sa@beamerfalse\standalonebeamerfalse -\def\sa@clsoption{% - \define@key{standalone.cls}% -} -\sa@clsoption{border}{% - \sa@readborder#1 {} {} {} {} \@nnil -} -\sa@clsoption{margin}{% - \sa@readborder#1 {} {} {} {} \@nnil -} -\def\sa@boolean#1#2{% - \sa@boolorvalue{#1}{#2}% - {\ClassError{standalone}{Invalid value '#2' for boolean key '#1'}{}}% -} -\def\sa@boolorvalue#1#2{% - \begingroup - \edef\@tempa{#2}% - \def\@tempb{true}% - \ifx\@tempa\@tempb - \endgroup - \csname sa@#1true\endcsname - \expandafter\@gobble - \else - \def\@tempb{false}% - \ifx\@tempa\@tempb - \endgroup - \csname sa@#1false\endcsname - \expandafter\expandafter - \expandafter\@gobble - \else - \endgroup - \expandafter\expandafter - \expandafter\@firstofone - \fi\fi -} -\sa@clsoption{preview}[true]{% - \sa@boolean{preview}{#1}% - \ifsa@preview - \setkeys{standalone.cls}{crop=false,float=false}% - \fi -} -\sa@previewtrue -\sa@clsoption{crop}[true]{% - \sa@boolean{crop}{#1}% - \ifsa@crop - \setkeys{standalone.cls}{preview=false,float=false}% - \fi -} -\sa@clsoption{ignorerest}[true]{% - \sa@boolean{ignorerest}{#1}% -} -\sa@clsoption{ignoreempty}[true]{% - \sa@boolean{ignoreempty}{#1}% -} -\sa@clsoption{multi}[true]{% - \sa@boolorvalue{multi}{#1}{\sa@multitrue\AtBeginDocument{\standaloneenv{#1}}}% -} -\sa@clsoption{multido}[true]{% - \sa@boolean{multido}{#1}% - \ifsa@multido - \setkeys{standalone.cls}{multi=samultido}% - \fi -} -\sa@clsoption{math}[true]{% - \sa@boolean{math}{#1}% - \ifsa@math - \setkeys{standalone.cls}{multi=true,ignoreempty=true,border=0.50001bp}% - \fi -} -\AtBeginDocument{\ifsa@math\sa@math\fi} -\def\sa@math{% - \standaloneenv{math}% - \def\({\begingroup\math}% - \def\){\endmath\endgroup}% - \def\[{\(\displaystyle}% - \def\]{\)}% - \def\displaymath{\math\displaystyle}% - \def\enddisplaymath{\endmath}% - \newcommand*\multimathsep{% - \endmath - \math - \let\\\multimathsep - }% - \newenvironment{multimath}{% - \math - \let\\\multimathsep - }{% - \endmath - }% - \newcommand*\multidisplaymathsep{% - \endmath - \math\displaystyle - \let\\\multidisplaymathsep - }% - \newenvironment{multidisplaymath}{% - \math\displaystyle - \let\\\multidisplaymathsep - }{% - \endmath - }% -} -\sa@clsoption{varwidth}[true]{% - \sa@boolorvalue{varwidth}{#1}{\sa@varwidthtrue\def\sa@width{#1}}% - \ifsa@varwidth - \def\sa@varwidth{\varwidth{\sa@width}}% - \def\sa@endvarwidth{\endvarwidth}% - \else - \let\sa@varwidth\@empty - \let\sa@endvarwidth\@empty - \fi -} -\let\sa@varwidth\@empty -\let\sa@endvarwidth\@empty -\sa@clsoption{tikz}[true]{% - \sa@boolean{tikz}{#1}% - \ifsa@tikz - \setkeys{standalone.cls}{multi=tikzpicture,varwidth=false}% - \fi -} -\sa@clsoption{pstricks}[true]{% - \sa@boolean{pstricks}{#1}% - \ifsa@pstricks - \setkeys{standalone.cls}{multi=pspicture,varwidth=false}% - \fi -} -\sa@clsoption{beamer}[true]{% - \sa@boolean{beamer}{#1}% - \ifstandalonebeamer - \def\sa@class{beamer}% - \setkeys{standalone.cls}{preview=false,crop=false,varwidth=false}% - \else - \begingroup - \def\@tempa{beamer}% - \ifx\@tempa\sa@class - \endgroup - \def\sa@class{article}% - \else - \endgroup - \fi - \fi -} -\sa@clsoption{class}{% - \def\sa@class{#1}% -} -\def\sa@class{article} -\sa@clsoption{float}[true]{% - \sa@boolean{float}{#1}% - \ifsa@float - \let\@float\sa@origfloat - \let\end@float\sa@origendfloat - \else - \ifx\@float\sa@nofloat\else - \let\sa@origfloat\@float - \fi - \ifx\end@float\sa@endnofloat\else - \let\sa@origendfloat\end@float - \fi - \let\@float\sa@nofloat - \let\end@float\sa@endnofloat - \fi -} -\def\sa@nofloat#1{% - \def\@captype{#1}% - \trivlist\item[]% - \@ifnextchar[{% - \begingroup - \def\@tempa[####1]{% - \endgroup - }\@tempa - }{}% -} -\def\sa@endnofloat{% - \endtrivlist -} -\sa@clsoption{convert}[]{% - \setkeys{standalone.cls/convert}{true,#1}% -} -\sa@clsoption{disable@convert}[]{% - \typeout{Disable conversion} - \sa@convertfalse - \let\sa@converttrue\relax -} -\def\sa@convertoption{% - \define@key{standalone.cls/convert}% -} -\def\sa@convertvar#1#2{% - \define@key{standalone.cls/convert}{#1}{% - \@namedef{sa@convert@#1}{##1}% - }% - \@namedef{sa@convert@#1}{#2}% -} -\sa@convertoption{true}[]{% - \sa@converttrue -} -\sa@convertoption{false}[]{% - \sa@convertfalse -} -\sa@convertoption{png}[]{% - \setkeys{standalone.cls/convert}{true,outext={.png}}% -} -\sa@clsoption{png}[]{% - \setkeys{standalone.cls/convert}{png,#1}% -} -\sa@convertoption{realmainfile}[]{% - \RequirePackage{currfile-abspath}% - \getmainfile - \let\sa@convert@mainfile\themainfile -} -\sa@convertoption{jpg}[]{% - \setkeys{standalone.cls/convert}{true,outext={.jpg}}% -} -\sa@clsoption{jpg}[]{% - \setkeys{standalone.cls/convert}{jpg,#1}% -} -\sa@convertoption{gif}[]{% - \setkeys{standalone.cls/convert}{true,outext={.gif}}% -} -\sa@clsoption{gif}[]{% - \setkeys{standalone.cls/convert}{gif,#1}% -} -\sa@convertoption{onfailure}{% - \begingroup - \edef\@tempa{#1}% - \def\@tempb{error}% - \ifx\@tempa\@tempb - \endgroup - \let\sa@convert@failuremsg\ClassError - \else - \def\@tempb{warning}% - \ifx\@tempa\@tempb - \endgroup - \let\sa@convert@failuremsg\ClassWarning - \else - \def\@tempb{info}% - \ifx\@tempa\@tempb - \endgroup - \let\sa@convert@failuremsg\ClassInfo - \else - \def\@tempb{ignore}% - \ifx\@tempa\@tempb - \endgroup - \def\sa@convert@failuremsg##1##2##3{}% - \let\sa@convert@notfoundmsg\@gobbletwo - \else - \let\on@line\@empty - \ClassError{standalone}{Invalid value '\@tempa' for the 'onfailure' option.\MessageBreak - Valid values: 'error', 'warning', 'info', 'ignore'}{}% - \endgroup - \fi\fi\fi\fi -} -\let\sa@convert@failuremsg\ClassWarning -\let\sa@convert@notfoundmsg\ClassWarning -\sa@convertoption{defgsdevice}{% - \sa@defgsdevice#1\relax\relax -} -\def\sa@defgsdevice#1#2{% - \@namedef{sa@gsdevice@#1}{#2}% -} -\@namedef{sa@gsdevice@.jpg}{jpeg}% -\@namedef{sa@gsdevice@.png}{png16m}% -\sa@convertoption{command}{% - \def\sa@convert@command{#1}% -} -\sa@convertoption{pdf2svg}[]{% - \def\sa@convert@command{pdf2svg \infile\space\outfile}% - \sa@convertvar{outext}{.svg} -} -\sa@convertoption{imagemagick}[]{% - \def\sa@convert@command{\convertexe\space -density \density\space \infile\space \ifx\size\empty\else -resize \size\fi\space -quality 90 \outfile}% - \let\sa@convert@pageoffset\m@ne -} -\sa@convertoption{ghostscript}[]{% - \def\sa@convert@command{\gsexe\space -dSAFER -dBATCH -dNOPAUSE -sDEVICE=\gsdevice\space -r\density\space -sOutputFile=\outfile\space \infile}% - \let\sa@convert@pageoffset\z@ -} -\sa@convertvar{latexoptions}{ -shell-escape } -\sa@convertvar{subjobname}{\jobname} -\sa@convertvar{mainfile}{\jobname} -\sa@convertvar{quote}{} -\let\sa@convert@quote\relax -\sa@convertvar{size}{} -\sa@convertvar{inname}{\subjobname} -\sa@convertvar{infile}{\inname\inext} -\sa@convertvar{outext}{.png} -\sa@convertvar{outname}{\inname} -\sa@convertvar{outfile}{\outname\ifsa@multi\sa@multi@pagemark\fi\outext} -\def\sa@multi@pagemark{-\percent0d}% -\sa@convertvar{density}{300} -\sa@convertvar{gsdevice}{% - \expandafter\ifx\csname sa@gsdevice@\outext\endcsname\relax - \expandafter\@gobble\outext - \else - \csname sa@gsdevice@\outext\endcsname - \fi -} -\ifluatex - \sa@convertvar{latex}{lualatex} - \sa@convertvar{inext}{.pdf} - \sa@convertvar{precommand}{} - \setkeys{standalone.cls/convert}{imagemagick} -\else -\ifpdf - \sa@convertvar{latex}{pdflatex} - \sa@convertvar{inext}{.pdf} - \sa@convertvar{precommand}{} - \setkeys{standalone.cls/convert}{imagemagick} -\else -\ifxetex - \sa@convertvar{latex}{xelatex} - \sa@convertvar{inext}{.pdf} - \sa@convertvar{precommand}{} - \setkeys{standalone.cls/convert}{imagemagick} -\else - \sa@convertvar{latex}{latex} - \sa@convertvar{inext}{.ps} - \sa@convertvar{precommand}{dvips \jobname.dvi} - \setkeys{standalone.cls/convert}{ghostscript} -\fi\fi\fi -\begingroup -\ifluatex - \csname @tempswa\directlua{ - if os.type == "windows" then - tex.sprint("true") - else - tex.sprint("false") - end - }\endcsname -\else - \IfFileExists{/dev/null}{\@tempswafalse}{\@tempswatrue}% -\fi -\if@tempswa - \endgroup - \sa@convertvar{convertexe}{imgconvert} - \sa@convertvar{gsexe}{gswin32c} -\else - \endgroup - \sa@convertvar{convertexe}{convert} - \sa@convertvar{gsexe}{gs} -\fi -\newcommand*\standaloneenv[1]{% - \begingroup - \edef\@tempa{\endgroup\noexpand\@for\noexpand\@tempa:=\zap@space#1 \@empty}% - \@tempa\do{\expandafter\@standaloneenv\expandafter{\@tempa}}% - \setkeys{standalone.cls}{multi}% -} -\@onlypreamble\standaloneenv -\newcommand*{\standaloneconfig}{\setkeys{standalone.cls}} -\let\@standaloneenv\@gobble -\newcount\sa@internal -\newcounter{sapage} -\let\standalone\empty -\let\endstandalone\relax -\def\sa@width{\linewidth} -\InputIfFileExists{standalone.cfg}{}{} -\begingroup -\def\@tempa{\endgroup\setkeys*{standalone.cls}} -\expandafter\expandafter\expandafter\@tempa -\expandafter\expandafter\expandafter{\csname opt@standalone.cls\endcsname} -\let\@classoptionslist\XKV@rm -\disable@keys{standalone.cls}{crop,preview,class,beamer,ignorerest} -\AtBeginDocument{% - \disable@keys{standalone.cls}{multi}% -} -\expandafter\expandafter\expandafter\LoadClass -\expandafter\expandafter\expandafter[% -\expandafter\@classoptionslist -\expandafter]\expandafter{\sa@class} -\ifsa@ignorerest - \def\sa@startignore{\sa@boxit} -\else - \let\sa@startignore\relax -\fi -\ifsa@ignorerest - \def\sa@stopignore{\endsa@boxit} -\else - \let\sa@stopignore\relax -\fi -\ifsa@multido -\RequirePackage{multido} -\let\sa@orig@multido@\multido@ -\renewcommand{\multido@}[6]{% - \sa@stopignore - \sa@orig@multido@{#1}{#2}{#3}{#4}{#5}{% - \sa@startignore - \begin{samultido}% - \let\multido@\sa@orig@multido@ - #6% - \end{samultido}% - \sa@stopignore - }% - \sa@startignore -} -\fi -\ifsa@convert -\ifx\sa@convert@quote\relax -\begingroup -\@tempswafalse -\expandafter\ifx\csname pdftexbanner\endcsname\relax - \@tempswatrue -\else -\def\MiKTeX{MiKTeX} -\@onelevel@sanitize\MiKTeX -\expandafter\def\expandafter\testmiktex\expandafter#\expandafter1\MiKTeX#2\relax{% - \ifx\empty#2\empty - \@tempswafalse - \else - \@tempswatrue - \fi -} -\expandafter\expandafter -\expandafter\testmiktex\expandafter\pdftexbanner\MiKTeX\relax\relax - -\fi -\expandafter -\endgroup -\if@tempswa -\def\sa@convert@quote{"} -\else -\def\sa@convert@quote{'} -\fi -\fi -\fi -\ifsa@varwidth - \RequirePackage{varwidth} -\fi -\ifsa@tikz - \RequirePackage{tikz} -\fi -\ifsa@pstricks - \RequirePackage{pstricks} -\fi -\ifsa@preview -\RequirePackage{preview} -\ifsa@multi\else - \@ifundefined{endstandalone}{% - \renewenvironment{standalone} - {\preview\sa@varwidth} - {\sa@endvarwidth\endpreview} - }{}% TODO: Add info message? -\fi -\def\PreviewBbAdjust{-\sa@border@left\space -\sa@border@bottom\space \sa@border@right\space \sa@border@top}% -\def\@standaloneenv#1{% - \expandafter\ifx\csname sa@orig@#1\endcsname\relax - \expandafter\let\csname sa@orig@#1\expandafter\endcsname\csname #1\endcsname - \expandafter\let\csname sa@orig@end#1\expandafter\endcsname\csname end#1\endcsname - \fi - \expandafter\def\csname #1\endcsname{% - \ifnum\sa@internal=0 - \addtocounter{sapage}\@ne - \preview - \sa@varwidth - \fi - \advance\sa@internal\@ne - \csname sa@orig@#1\endcsname - }% - \expandafter\def\csname end#1\endcsname{% - \csname sa@orig@end#1\endcsname - \advance\sa@internal\m@ne - \ifnum\sa@internal=0 - \sa@endvarwidth - \endpreview - \fi - }% -}% -\fi -\ifsa@crop -\newbox\sa@box -\pagestyle{empty} -\hoffset=-72.27pt -\voffset=-72.27pt -\topmargin=0pt -\headheight=0pt -\headsep=0pt -\marginparsep=0pt -\marginparwidth=0pt -\footskip=0pt -\marginparpush=0pt -\oddsidemargin=0pt -\evensidemargin=0pt -\topskip=0pt -\textheight=\maxdimen -\def\sa@boxit{% - \setbox\sa@box\hbox\bgroup\color@setgroup\sa@varwidth -}% -\def\endsa@boxit{% - \sa@endvarwidth\color@endgroup\egroup -}% -\renewenvironment{standalone}{% - \ifsa@multi - \sa@startignore - \else - \sa@boxit - \fi -}{% - \ifsa@multi - \sa@stopignore - \else - \endsa@boxit - \sa@handlebox - \fi -} -\ifsa@multi\else - \sa@ignorerestfalse -\fi -\ifsa@ignorerest - \def\@standaloneenv#1{% - \expandafter\ifx\csname sa@orig@#1\endcsname\relax - \expandafter\let\csname sa@orig@#1\expandafter\endcsname\csname #1\endcsname - \expandafter\let\csname sa@orig@end#1\expandafter\endcsname\csname end#1\endcsname - \fi - \expandafter\def\csname #1\endcsname{% - \ifnum\sa@internal=0 - \addtocounter{sapage}\@ne - \edef\@tempa{\endgroup - \noexpand\endsa@boxit - \begingroup - \def\noexpand\@currenvir{\@currenvir}% - \def\noexpand\@currenvline{\@currenvline}% - }% - \@tempa - \sa@boxit - \fi - \advance\sa@internal\@ne - \csname sa@orig@#1\endcsname - }% - \expandafter\def\csname end#1\endcsname{% - \csname sa@orig@end#1\endcsname - \advance\sa@internal\m@ne - \ifnum\sa@internal=0 - \endsa@boxit - \sa@handlebox - \aftergroup\sa@boxit - \fi - }% - }% -\else - \def\@standaloneenv#1{% - \expandafter\ifx\csname sa@orig@#1\endcsname\relax - \expandafter\let\csname sa@orig@#1\expandafter\endcsname\csname #1\endcsname - \expandafter\let\csname sa@orig@end#1\expandafter\endcsname\csname end#1\endcsname - \fi - \expandafter\def\csname #1\endcsname{% - \ifnum\sa@internal=0 - \addtocounter{sapage}\@ne - \sa@boxit - \fi - \advance\sa@internal\@ne - \csname sa@orig@#1\endcsname - }% - \expandafter\def\csname end#1\endcsname{% - \csname sa@orig@end#1\endcsname - \advance\sa@internal\m@ne - \ifnum\sa@internal=0 - \endsa@boxit - \sa@handlebox - \fi - }% - }% -\fi -\def\sa@handlebox{% - \ifcase - 0% - \ifsa@ignoreempty - \ifdim\wd\sa@box=\z@ - \ifdim\ht\sa@box=\z@ - \ifdim\dp\sa@box=\z@ - 1% - \fi\fi\fi - \fi - \relax - \sbox\sa@box{% - \hskip\sa@border@left - \@tempdima=\ht\sa@box - \advance\@tempdima\sa@border@top\relax - \ht\sa@box=\@tempdima - \@tempdima=\dp\sa@box - \advance\@tempdima\sa@border@bottom\relax - \dp\sa@box=\@tempdima - \raise\dp\sa@box - \box\sa@box - \hskip\sa@border@right - }% - \sa@placebox - \fi -} -\ifcase0% - \ifpdf\else\ifluatex\else\ifxetex\else 1\fi\fi\fi - \relax - \def\sa@placebox{% - \newpage - \global\pdfpagewidth=\wd\sa@box - \global\pdfpageheight=\ht\sa@box - \global\paperwidth=\wd\sa@box - \global\paperheight=\ht\sa@box - \global\hsize=\wd\sa@box - \global\vsize=\ht\sa@box - \global\@colht=\ht\sa@box - \global\@colroom=\ht\sa@box - \noindent\usebox\sa@box - \newpage - } - \else - \def\sa@placebox{% - \global\paperwidth=\wd\sa@box - \global\paperheight=\ht\sa@box - \global\@colht=\maxdimen - \global\@colroom=\maxdimen - \global\hsize=\maxdimen - \global\vsize=\maxdimen - \sa@papersize - \ifsa@multi - \begingroup - \@tempdima0.99626\paperwidth - \@tempdimb0.99626\paperheight - \edef\@tempc{\strip@pt\@tempdima}% - \edef\@tempd{\strip@pt\@tempdimb}% - \advance\@tempdima by .998pt - \advance\@tempdimb by .998pt - \def\strip@float##1.##2\relax{##1}% - \edef\@tempa{\expandafter\strip@float\the\@tempdima\relax}% - \edef\@tempb{\expandafter\strip@float\the\@tempdimb\relax}% - \special{ps::% - \@percentchar\@percentchar PageBoundingBox: 0 0 \@tempa\space\@tempb^^J% - \@percentchar\@percentchar HiResPageBoundingBox: 0 0 \@tempc\space\@tempd^^J% - \@percentchar\@percentchar BeginPageSetup^^J% - << /PageSize [\@tempc\space\@tempd] - >> setpagedevice^^J%<< - 0 0 bop^^J% - \@percentchar\@percentchar EndPageSetup}% - \endgroup - \fi - \topskip=0pt - \noindent\sa@ps@content - \newpage - } -\def\sa@ps@content{% - \noindent\usebox\sa@box - \global\def\sa@ps@content{% - \@tempdima\sa@yoffset - \advance\@tempdima-\topskip - \dp\sa@box\z@ - \ht\sa@box\z@ - \noindent\lower\@tempdima\copy\sa@box - }% -} -\def\sa@papersize{% - \global\let\sa@papersize\relax - \special{papersize=\the\paperwidth,\the\paperheight}% - \global\sa@yoffset=\paperheight - \special{ps::% - \@percentchar\@percentchar HiResBoundingBox: 0 0 \the\paperwidth\space\the\paperheight^^J% - }% -} -\newlength\sa@yoffset -\fi -\fi -\ifstandalonebeamer -\newenvironment{standaloneframe}{% - \@ifnextchar<% - {\@standaloneframe}% - {\@@standaloneframe{}}% -}{\end{frame}}% -\def\@standaloneframe<#1>{% - \@@standaloneframe{<#1>}% -} -\def\@@standaloneframe#1{% - \@ifnextchar[%] - {\@@@standaloneframe{#1}}% - {\@@@standaloneframe{#1}[]}% -}% -\def\@@@standaloneframe#1[{% - \@ifnextchar<% - {\@@@@standaloneframe{#1}[}% - {\@@@@@@standaloneframe{#1}[}% -}% -\def\@@@@standaloneframe#1[#2]{% - \@ifnextchar[%] - {\@@@@@standaloneframe{#1}{#2}}% - {\begin{frame}#1[#2][environment=standaloneframe]}% -}% -\def\@@@@@standaloneframe#1#2[#3]{% - \begin{frame}#1[#2][environment=standaloneframe,#3]% -}% -\def\@@@@@@standaloneframe#1[#2]{% - \begin{frame}#1[environment=standaloneframe,#2]% -}% -\fi -\expandafter\ifx\csname sa@internal@run\endcsname\relax\else - \AtEndDocument{% - \immediate\write\@mainaux{\gdef\noexpand\sa@multi@numpages{\arabic{sapage}}}% - } - \sa@convertfalse -\fi -\ifsa@convert -\let\sa@convert@stop\stop -\begingroup -\let\on@line\@gobble -\def\sa@convert#1{% - \IfFileExists{\outfile}{% - \edef\filemodbefore{\csname pdffilemoddate\endcsname{\outfile}}% - }{% - \IfFileExists{\outname\outext}{% - \edef\filemodbefore{\csname pdffilemoddate\endcsname{\outname\outext}}% - }{% - \IfFileExists{\outname-0\outext}{% - \edef\filemodbefore{\csname pdffilemoddate\endcsname{\outname-0\outext}}% - }{% - \IfFileExists{\outname-1\outext}{% - \edef\filemodbefore{\csname pdffilemoddate\endcsname{\outname-1\outext}}% - }{% - \def\filemodbefore{}% - }}}}% - \edef\@tempa{\jobname}% - \edef\@tempb{\sa@convert@subjobname}% - \@onelevel@sanitize\@tempa - \@onelevel@sanitize\@tempb - \@tempswafalse - \ifx\@tempa\@tempb - \@tempswatrue - \edef\infile@filemodbefore{\csname pdffilemoddate\endcsname{\infile}}% - \else - \global\let\sa@convert@stop\relax - \fi - \immediate\write18{\sa@convert@latex\space\sa@convert@latexoptions\space - -jobname \sa@convert@quote\sa@convert@subjobname\sa@convert@quote\space - \sa@convert@quote\string\expandafter\string\def\string\csname\space - sa@internal@run\string\endcsname{1}\string\input{\sa@convert@mainfile}\sa@convert@quote}% - \begingroup - \gdef\sa@multi@numpages{1}% - \IfFileExists{\sa@convert@subjobname.aux}{% - \globaldefs=\m@ne - \@@input\sa@convert@subjobname.aux\relax - \globaldefs=\z@ - \xdef\sa@multi@numpages{\sa@multi@numpages}% - }{}% - \endgroup - \setcounter{sapage}{\sa@multi@numpages}% - \addtocounter{sapage}\sa@convert@pageoffset - \ifnum\c@sapage=\z@ - \def\sa@multi@pagemark{}% - \edef\sa@lastoutfile{\outfile}% - \else - \@tempcnta\z@ - \loop\ifnum\value{sapage}>0 - \advance\@tempcnta\@ne - \divide\c@sapage by 10\relax - \repeat - \edef\sa@multi@pagemark{-\percent0\the\@tempcnta d}% - \begingroup - \setcounter{sapage}{\sa@multi@numpages}% - \addtocounter{sapage}\sa@convert@pageoffset - \def\sa@multi@pagemark{-\arabic{sapage}}% - \xdef\sa@lastoutfile{\outfile}% - \endgroup - \fi - \if@tempswa - \edef\infile@filemodafter{\csname pdffilemoddate\endcsname{\infile}}% - \ifx\infile@filemodbefore\infile@filemodafter - \global\let\sa@convert@stop\relax - \fi - \fi - \edef\sa@convert@precommand{\sa@convert@precommand}% - \ifx\sa@convert@precommand\@empty\else - \immediate\write18{\sa@convert@precommand}% - \fi - \immediate\write18{\sa@convert@command}% - \@tempswafalse - \IfFileExists{\sa@lastoutfile}{% - \edef\filemodafter{\csname pdffilemoddate\endcsname{\sa@lastoutfile}}% - \ifx\filemodbefore\filemodafter - \expandafter\ifx\csname pdffilemoddate\endcsname\relax\else - \sa@convert@failuremsg{standalone}{#1}{}% - \fi - \else - \typeout{Class standalone:^^JOutput written on \sa@lastoutfile.}% - \fi - }{% - \sa@convert@failuremsg{standalone}{#1}{}% - }% -} -\let\subjobname\sa@convert@subjobname -\let\mainfile\sa@convert@mainfile -\let\infile\sa@convert@infile -\let\inext\sa@convert@inext -\let\inname\sa@convert@inname -\let\gsdevice\sa@convert@gsdevice -\let\convertexe\sa@convert@convertexe -\let\gsexe\sa@convert@gsexe -\let\density\sa@convert@density -\let\size\sa@convert@size -\let\outext\sa@convert@outext -\let\outname\sa@convert@outname -\let\outfile\sa@convert@outfile -\let\percent\@percentchar -\let\quote\sa@convert@quote -\ifcase0% - \expandafter\ifx\csname pdfshellescape\endcsname\relax - \ifeof18 \else 3\fi - \else\the\pdfshellescape\fi -\relax% 0 - \sa@convert@failuremsg - {standalone}{Shell escape disabled! Cannot convert file '\infile'.}{}% - \global\let\sa@convert@stop\relax -\or% 1 - \sa@convert{Conversion unsuccessful!\MessageBreak - There might be something wrong with your\MessageBreak - conversation software or the file permissions!}% -\else% 2 or 3 - \sa@convert{Conversion failed! Please ensure that shell escape\MessageBreak is enabled (e.g. use '-shell-escape').}% -\fi -\endgroup -\expandafter\sa@convert@stop -\fi -\begingroup -\toks@\expandafter{% - \document - \sa@cls@afterbegindocument -} -\xdef\document{\the\toks@}% -\toks@\expandafter{% - \expandafter - \sa@cls@beforeenddocument - \enddocument -} -\xdef\enddocument{\the\toks@}% -\endgroup -\def\sa@cls@afterbegindocument{\standalone\ignorespaces} -\def\sa@cls@beforeenddocument{\ifhmode\unskip\fi\endstandalone} -\endinput -%% -%% End of file `standalone.cls'.