%% $Id: hvextern.sty 884 2024-03-27 19:50:43Z herbert $ %% This is file `hvextern.sty', %% %% Copyright (C) 2016-24 %% Herbert Voss %% %% It 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.3c or later is part of all distributions of LaTeX %% version 2005/12/01 or later. \def\hvexternFileversion{0.41} \ProvidesFile{hvextern}[2024/03/27 v\hvexternFileversion: package for running external documents (HV)] \newif\ifhv@extern@checkCode \hv@extern@checkCodefalse \DeclareOption{checkCode}{\hv@extern@checkCodetrue} \ProcessOptions \RequirePackage{shellesc,xkeyval,graphicx,comment} \newif\ifhv@extern@shellescape % the main command line option, for later test %\typeout{>>>> \the\ShellEscapeStatus}% \expandafter\ifnum\the\ShellEscapeStatus=1 \hv@extern@shellescapetrue \typeout{>>>> command line option shell-escape is enabled!}% \else \hv@extern@shellescapefalse \typeout{>>>> command line option shell-escape is disabled!}% \fi \RequirePackage{fancyvrb,tikz,listings,ifplatform,iftex} \RequirePackage{ifoddpage,filemod} \RequirePackage{tcolorbox,xparse} \tcbuselibrary{skins,breakable} \def\hv@ex@typeout#1{\ifhv@extern@verbose\typeout{>>(hvextern) #1}\fi} \ifwindows \def\hv@move{move }% \def\hv@rm{del }% \def\hv@mkdir{mkdir }% \else \def\hv@move{mv }% \def\hv@rm{rm }% \def\hv@mkdir{mkdir -p }% \def\hv@diff{diff } \fi \newcounter{hv@extern@runs} \newcounter{hv@extern@runsAfter} \newcounter{@@@runs} \newcounter{hv@extern@pageCNT} \newsavebox\hv@extern@box \newlength\hv@TextWidth \newlength\hv@extern@pagesep \newlength\hv@extern@mpsep \newlength\hv@extern@framesep \newlength\hv@extern@aboveskip \newlength\hv@extern@belowpreambleskip \newlength\hv@extern@belowbodyskip \newlength\hv@extern@belowskip \newlength\hv@extern@shiftFN \newlength\hv@extern@vshift \newlength\hvExternLineWidth \AtBeginDocument{\hvExternLineWidth=\the\dimexpr\linewidth-2\fboxsep-2\fboxrule\relax} \newlength\hv@extern@mpwidth \setlength\hv@extern@mpwidth{\z@} \newif\ifhv@extern@save@force@state \newif\ifhv@extern@runR \define@key{hv}{progpath}{\def\hv@extern@progpath{#1}} \define@key{hv}{runsequence}[]{\def\hv@extern@runsequence{#1}} \define@key{hv}{runs}[1]{\setcounter{hv@extern@runs}{#1}} \define@key{hv}{runsAfter}[1]{\setcounter{hv@extern@runsAfter}{#1}} \define@key{hv}{grfOptions}[]{\def\hv@extern@grfOptions{#1}} \define@key{hv}{lstOptions}[]{\def\hv@extern@lstOptions{#1}} \define@key{hv}{textOptions}[]{\def\hv@extern@textOptions{#1}} \define@key{hv}{BGpreamble}[black!12]{\def\hv@extern@BGpreamble{#1}} \define@key{hv}{BGbody}[black!8]{\def\hv@extern@BGbody{#1}} \define@key{hv}{BOpreamble}[black!12]{\def\hv@extern@BOpreamble{#1}} \define@key{hv}{BObody}[black!8]{\def\hv@extern@BObody{#1}} \define@key{hv}{docType}[latex]{\def\hv@extern@docType{#1}} %\define@choicekey*+{hv}{docType}[\val\nr]{latex,mp,tex,py,pl,lua,java,context,sh,R}[latex]{% % \hv@typeout{doc type \nr}% % \def\hv@extern@docType{\val}% %}{\PackageWarning{hvextern}{erroneous input (#1) for docType ignored. Using latex.}% % \def\hv@extern@docType{latex}% % } \define@key{hv}{caption}[]{\def\hv@extern@caption{#1}} \define@key{hv}{label}[]{\def\hv@extern@label{#1}} \define@key{hv}{pages}[1]{\def\hv@extern@pages{#1}} \define@key{hv}{pagesep}[1em]{\hv@extern@pagesep=#1} \define@key{hv}{cropmargin}[2]{\def\hv@extern@cropmargin{#1 }} \define@key{hv}{mpwidth}[0pt]{\setlength\hv@extern@mpwidth{#1}} \define@key{hv}{mpsep}[1em]{\setlength\hv@extern@mpsep{#1}} \define@key{hv}{mpvalign}[t]{\def\hv@extern@mpvalign{#1}} \define@key{hv}{ext}[tex]{\def\hv@extern@ext{.#1}} \define@boolkey{hv}[hv@extern@]{redirect}[true]{} \define@boolkey{hv}[hv@extern@]{usefancyvrb}[true]{} \define@boolkey{hv}[hv@extern@]{showFilename}[true]{} \define@boolkey{hv}[hv@extern@]{outerFN}[true]{} \define@key{hv}{shiftFN}[0pt]{\setlength\hv@extern@shiftFN{#1}} \define@key{hv}{vshift}[0pt]{\setlength\hv@extern@vshift{#1}}% \define@boolkey{hv}[hv@extern@]{code}[true]{} \define@boolkey{hv}[hv@extern@]{force}[true]{\@nameuse{hv@extern@save@force@state#1}} \define@boolkey{hv}[hv@extern@]{crop}[true]{} \define@boolkey{hv}[hv@extern@]{tcbox}[true]{} \define@boolkey{hv}[hv@extern@]{biber}[true]{} \define@boolkey{hv}[hv@extern@]{xindex}[true]{} \define@key{hv}{xindexOptions}[]{\def\hv@extern@xindexOptions{#1}} \define@boolkey{hv}[hv@extern@]{includegraphic}[true]{} \define@boolkey{hv}[hv@extern@]{showoutput}[true]{} \define@boolkey{hv}[hv@extern@]{inline}[true]{\hv@extern@codefalse\hv@extern@showFilenamefalse} \define@boolkey{hv}[hv@extern@]{frame}[true]{} \define@key{hv}{framesep}[\the\fboxsep]{\setlength\hv@extern@framesep{#1}} \define@boolkey{hv}[hv@extern@]{float}[true]{} \define@key{hv}{floatsetting}[]{\def\hv@extern@floatsetting{#1}} \define@key{hv}{cleanup}[{aux,log,psaux}]{\def\hv@extern@cleanup{#1}}% \define@boolkey{hv}[hv@extern@]{moveToExampleDir}[true]{} \define@key{hv}{align}[\centering]{\def\hv@extern@align{#1}} \define@key{hv}{ExampleDir}[Examples]{% \ifhv@extern@moveToExampleDir \def\hv@extern@ExamplesDir{#1/}% \else \def\hv@extern@ExamplesDir{}% \fi } \define@boolkey{hv}[hv@extern@]{eps}[true]{} \define@boolkey{hv}[hv@extern@]{verbose}[true]{} \ifwindows \define@choicekey*+{hv}{compiler}[\val\nr]{mpost.exe,tex.exe,latex.exe,luatex.exe,% python3.exe,perl.exe,lua.exe,java.exe,% xetex.exe,pdflatex.exe,lualatex.exe,xelatex.exe,context.exe,sh,% texlua.exe,Rscript.exe}[pdflatex.exe]{% \hv@ex@typeout{Compiler type (\nr) \val}% \def\hv@extern@compiler{\val}% \edef\hv@extern@compilerNo{\nr}% \ifnum\nr=15 \hv@extern@runRtrue\else\hv@extern@runRfalse\fi }{\PackageWarning{hvextern}{unknown compiler type (#1). Maybe you should define a run sequence???}% \def\hv@extern@compiler{#1}% \def\hv@extern@compilerNo{-1}% } \else \define@choicekey*+{hv}{compiler}[\val\nr]{mpost,tex,latex,luatex,python3,perl,lua,java,% xetex,pdflatex,lualatex,xelatex,context,sh,texlua,Rscript}[pdflatex]{% \hv@ex@typeout{Compiler type (\nr) \val}% \def\hv@extern@compiler{\val}% \edef\hv@extern@compilerNo{\nr}% \ifnum\nr=15 \hv@extern@runRtrue\else\hv@extern@runRfalse\fi }{\PackageWarning{hvextern}{unknown compiler type (#1). Maybe you should define a run sequence???}% \def\hv@extern@compiler{#1}% \def\hv@extern@compilerNo{-1}% } \fi \define@boolkey{hv}[hv@extern@]{shellesc}[true]{} \define@key{hv}{aboveskip}[\medskipamount]{\setlength\hv@extern@aboveskip{#1}} \define@key{hv}{belowpreambleskip}[2pt]{\setlength\hv@extern@belowpreambleskip{#1}} \define@key{hv}{belowbodyskip}[\smallskipamount]{\setlength\hv@extern@belowbodyskip{#1}} \define@key{hv}{belowskip}[\medskipamount]{\setlength\hv@extern@belowskip{#1}} \define@key{hv}{mposttex}[tex]{\def\hv@extern@mposttex{#1 }} \def\hvExternSetKeys#1{\setkeys{hv}{#1}} \def\ResetKeys{% \setkeys{hv}{% align=\centering,% Ausgabe zentrieren aboveskip=\medskipamount,% space above everything belowpreambleskip=2pt,%\smallskipamount,% space below preamble belowbodyskip=2pt, %\smallskipamount,% space below body belowskip=\medskipamount,% space below everything BGpreamble=black!12,% Backgroundcolor for preamble BGbody=black!8,% Backgroundcolor for body BOpreamble=black!12,% Bodercolor for preamble BObody=black!8,% Bodercolor for body biber=false,% Biber laufen lassen? caption=,% keine Caption cleanup={},% Hilfsdateien nicht löschen code=false,% show Code compiler=pdflatex,% zu verwendener Compiler crop=false,% erzeugte PDF "croppen" cropmargin=2,% 2pb margin docType=latex,% LaTeX example Code eps=false,% create an eps output? ExampleDir=Examples,% Unterverzeichnis für Beispiele ext=tex,% file extension float=false,% nicht als Gleitumgebung floatsetting=!htb,% placement force=true,% Compile, auch wenn PDF existiert? frame=false,% keinen Rahmen um Abbildung framesep=\the\fboxsep,% grfOptions={},% Optionen der einzubindenden Grafik includegraphic=true,% Grafik einbinden oder User überlassen inline=false,% Grafik nicht in derselben Zeile label=,% kein Label lstOptions={},% Optionen für das Listing moveToExampleDir=false,% Verschieben nach ExamplesDir mpwidth=0pt,% no minipage mpsep=1em,% sep between two minipages mpvalign=t,% if side by side output the vertical alignment outerFN=false,% use fullwidth in twocolumn mode (starred floats) pages=1,% welche Seiten auszugeben sind pagesep=1em,% horizontal sep between pages progpath={},% redirect=false,% write output into a file *.txt runs=1,% Anzahl Compiler-Durchläufe runsAfter=0, % Anzahl Durchläufe nach makeindex runsequence={},% Im Moment nicht aktiv shellesc=false,% use shell-escape shiftFN=\z@,% raise printed filename showFilename=false,% Filenamen im Rand angeben showoutput=true,% with false only code is shown tcbox=true,% use tcolorbox textOptions={},% Options for text output usefancyvrb=false,% use VerbatimInput instead of listings verbose=false,% no extra output in the logfile vshift=\z@,% raise object (pdf) with \raisebox{}{} xindex=false,% xindex laufen lassen? xindexOptions={},% options for xindex mposttex=tex,% mpost program tex or latex }% } \ResetKeys \ifhv@extern@checkCode \ifluatex \hv@ex@typeout{Loading hvextern.lua}% \directlua{kpse.set_program_name("luatex")require "hvextern.lua" }% \else \ifhv@extern@checkCode \hv@ex@typeout{Using xelatex or pdflatex! Will use a temporary file for diff}% % \hv@extern@checkCodefalse \fi \fi \fi {\catcode`\%=12 \catcode`\#=12 \gdef\perCent{%} \gdef\DoubleperCent{%%} \gdef\NumChar{#} \gdef\DoubleNumChar{##} } \ExplSyntaxOn \NewDocumentCommand\run@hv@extern@cleanup{ m } { \clist_map_inline:nn {#1}{\ShellEscape{\hv@rm \hv@extern@ExamplesDir\hvExternFilename.##1}} \ifnum\hv@extern@compilerNo=0\relax % we have metapost \ShellEscape{\hv@rm\space epsf.*}% \fi } \NewDocumentCommand\run@hv@extern@sequenceList{ m } { \clist_map_inline:nn {#1}{% \hv@ex@typeout{sequencerun: ##1}% \ShellEscape{\hv@extern@progpath##1\space\hv@run@options\hvExternFilename}% } } \ExplSyntaxOff \lstset{belowskip=0pt,aboveskip=0pt}% global \tcbset{breakable,left=2pt,right=2pt,top=2pt,bottom=2pt,boxsep=0pt} \def\hv@marginpar#1{% \sbox\hv@extern@box{\rotatebox[origin=C]{90}{\rule{2\hv@extern@shiftFN}{0pt}\texttt{#1}}}% \ht\hv@extern@box=\z@ \wd\hv@extern@box=\z@ \dp\hv@extern@box=\z@ \noindent \checkoddpage \ifoddpage% we have a right page \if@twocolumn \ifhv@extern@outerFN \makebox[\dimexpr\hv@TextWidth+\marginparsep-1.5ex][r]{\usebox\hv@extern@box}% \else \if@firstcolumn \llap{\usebox\hv@extern@box\rule{2.5ex}{0pt}}% \else \makebox[\dimexpr\hv@TextWidth+\marginparsep-1.5ex][r]{\usebox\hv@extern@box}% \fi \fi \else \makebox[\dimexpr\hv@TextWidth+\marginparsep-1.5ex][r]{\usebox\hv@extern@box}% \fi \else% we have an even page (left page) \if@twocolumn \ifhv@extern@outerFN \llap{\usebox\hv@extern@box\rule{2.5ex}{0pt}}% left page left side \else \if@firstcolumn \llap{\usebox\hv@extern@box\rule{2.5ex}{0pt}}% left page left side \else \makebox[\dimexpr\hv@TextWidth+\marginparsep-1.5ex][r]{\usebox\hv@extern@box}% left page right side \fi \fi \else \llap{\usebox\hv@extern@box\rule{2.5ex}{0pt}}% onecolumn left page left side \fi \fi } \newcommand\PreambleVerbatim[2][]{% \hv@ex@typeout{Running PreambleVerbatim with #1, #2}% \ifhv@extern@tcbox \begin{tcolorbox}[before skip=0pt,after skip=0pt,breakable,enhanced jigsaw]\VerbatimInput[#1]{#2}\end{tcolorbox}% \else \VerbatimInput[#1]{#2}% \fi} \newcommand\BodyVerbatim[2][]{% \hv@ex@typeout{Running BodyVerbatim with #1, #2}% \ifhv@extern@tcbox \begin{tcolorbox}[before skip=0pt,after skip=0pt,breakable,enhanced jigsaw]\VerbatimInput[#1]{#2}\end{tcolorbox}% \else \VerbatimInput[#1]{#2}% \fi} \newcommand\PreambleListing[2][]{% \hv@ex@typeout{Running PreambleListing with #1, #2}% \ifhv@extern@tcbox \begin{tcolorbox}[before skip=0pt,after skip=0pt,breakable,enhanced jigsaw%,top=-2pt ]\expandafter\lstinputlisting\expandafter[#1]{#2}\end{tcolorbox}% \else \expandafter\lstinputlisting\expandafter[#1]{#2}% \fi} \newcommand\BodyListing[2][]{% \hv@ex@typeout{Running BodyListing with #1, #2}% \ifhv@extern@tcbox \begin{tcolorbox}[before skip=0pt,after skip=0pt,breakable,enhanced jigsaw,%top=-2pt ]\expandafter\lstinputlisting\expandafter[#1]{#2}\end{tcolorbox}% \else \expandafter\lstinputlisting\expandafter[#1]{#2}% \fi} \newcounter{hv@example@counter} \newcommand\hv@extern@ExampleType[5]{% \@namedef{#1@initTextFancy}{\edef\FancyVerbStartString{#2}\edef\FancyVerbStopString{#3}}% text \@namedef{#1@initPreambleFancy}{\edef\FancyVerbStartString{#4}\edef\FancyVerbStopString{#5}}% code \@namedef{#1@initText}{linerange={#2}-{#3},includerangemarker=false}% text \@namedef{#1@initPreamble}{linerange={#4}-{#5},includerangemarker=false}% code }% {} ^^to prevent problems with lua comments % for the user interface \let\defMarkerType\hv@extern@ExampleType %%------------------ the config part -------------------- %---- MP \hv@extern@ExampleType{mp} {beginfig(1)} {endfig;} {\perCent StartVisiblePreamble} {\perCent StopVisiblePreamble} \def\hv@extern@runMP#1#2#3#4{% path compiler file extension \hv@ex@typeout{running #1#2 #3#4}% \ShellEscape{#1#2\space -tex=\hv@extern@mposttex\space #3#4}% \hv@ex@typeout{running #1tex #3}% \ShellEscape{#1tex\space "\string\input\space epsf\string\relax\string\nopagenumbers\string\epsfbox{#3.1}\string\bye"}% \hv@ex@typeout{running #1dvips #3}% \ShellEscape{#1dvips\space -j\space -E\space -o\space #3.eps\space epsf.dvi}% \hv@ex@typeout{running #1epstopdf #3}% \ShellEscape{#1epstopdf\space #3.eps}% } %---- TeX %\input{hvextern-tex.cfg} \hv@extern@ExampleType{tex} {\perCent StartBody} {\string\bye} {\perCent StartVisiblePreamble} {\perCent StopVisiblePreamble} \def\hv@extern@runTEX#1#2#3#4{% path compiler file extension \hv@ex@typeout{running #1#2 #3#4}% \ShellEscape{#1tex\space\hv@run@options #3#4}% \hv@ex@typeout{running #1dvips #3}% \ShellEscape{#1dvips\space #3.dvi}% \hv@ex@typeout{running ps2pdf #3.ps}% \ShellEscape{#1ps2pdf\space -dAutoRotatePages=/None\space -dALLOWPSTRANSPARENCY\space #3.ps}% } %---- LaTeX %\input{hvextern-latex.cfg} \hv@extern@ExampleType{latex}% {\string\begin\string{document\string}}% {\string\end\string{document\string}}% {\perCent StartVisiblePreamble}% {\perCent StopVisiblePreamble}% % only for the sequence latex->dvips->ps2pdf \def\hv@extern@runLATEX#1#2#3#4{% path-compiler-file-extension \hv@ex@typeout{running #1#2 #3#4}% \ShellEscape{#1#2\space\hv@run@options #3#4}% \hv@ex@typeout{running #1dvips #3}% \ShellEscape{#1dvips\space #3.dvi}% \hv@ex@typeout{running ps2pdf #3.ps}% \ShellEscape{#1ps2pdf\space -dAutoRotatePages=/None\space -dALLOWPSTRANSPARENCY\space #3.ps}% } %---- ConTeXt %\input{hvextern-context.cfg} \hv@extern@ExampleType{context} {\string\starttext} {\string\stoptext} {\perCent StartVisiblePreamble} {\perCent StopVisiblePreamble} %---- Python %\input{hvextern-py.cfg} \hv@extern@ExampleType{py} {\NumChar StartVisibleMain} {\NumChar StopVisibleMain} {\NumChar StartVisiblePreamble} {\NumChar StopVisiblePreamble} %---- Perl %\input{hvextern-pl.cfg} \hv@extern@ExampleType{pl} {\NumChar StartVisibleMain} {\NumChar StopVisibleMain} {\NumChar StartVisiblePreamble} {\NumChar StopVisiblePreamble} %---- Lua %\input{hvextern-lua.cfg} \hv@extern@ExampleType{lua} {--StartVisibleMain} {--StopVisibleMain} {--StartVisiblePreamble} {--StopVisiblePreamble} %---- Java \hv@extern@ExampleType{java} {//StartVisibleMain} {//StopVisibleMain} {//StartVisiblePreamble} {//StopVisiblePreamble} %---- Shell %\input{hvextern-sh.cfg} \hv@extern@ExampleType{sh} {\NumChar StartVisibleMain} {\NumChar StopVisibleMain} {\NumChar StartVisiblePreamble} {\NumChar StopVisiblePreamble} %---- R %\input{hvextern-R.cfg} \hv@extern@ExampleType{R} {\NumChar StartVisibleMain} {\NumChar StopVisibleMain} {\NumChar StartVisiblePreamble} {\NumChar StopVisiblePreamble} %%%--------------------------------- end config part ------------------ %% %% [#1]: Optionen #2: Filename %% \newenvironment{externalDocument}[2][] {% %\the\hv@extern@belowbodyskip\par% only for debug \ifhv@extern@shellesc\gdef\hv@run@options{ --shell-escape }\else\gdef\hv@run@options{}\fi% \xdef\hvExternFilename{#2-\arabic{hv@example@counter}}% \gdef\hv@extern@savePara{#1}% \setkeys{hv}{#1}% \begin \hv@ex@typeout{External filename: \hvExternFilename}% \expandafter\IfFileExists\expandafter{\hv@extern@ExamplesDir\hvExternFilename.pdf}{}{% \expandafter\IfFileExists\expandafter{\hv@extern@ExamplesDir\hvExternFilename.png}{}{% \expandafter\IfFileExists\expandafter{\hv@extern@ExamplesDir\hvExternFilename.txt}{}{% \global\hv@extern@forcetrue}}}% set force, if no pdf or png or txt exists \begingroup \ifhv@extern@shellescape \hv@ex@typeout{writing file \hvExternFilename\hv@extern@ext ...}% \else \hv@ex@typeout{no shell-escape, no writing of file \hvExternFilename\hv@extern@ext}% \let\filecontents\comment \let\endfilecontents\endcomment \fi \filecontents[force,noheader]{\hvExternFilename\hv@extern@ext}% }% end \begin{externaldocument} env {% start \end{externaldocument} env \endfilecontents \ifhv@extern@shellescape\hv@ex@typeout{... done}\fi \global\stepcounter{hv@example@counter}% \endgroup \expandafter\hvExternSetKeys\expandafter{\hv@extern@savePara}% \xdef\hv@extern@fullPath{\hv@extern@ExamplesDir\hvExternFilename}% \ifhv@extern@checkCode \ifluatex \directlua{if GetFileContents("\hvExternFilename\hv@extern@ext", "\hv@extern@ExamplesDir\hvExternFilename\hv@extern@ext") then tex.print("\\csname hv@ex@typeout\\endcsname{current file is NOT newer: no run }\\global\\csname hv@extern@forcefalse\\endcsname") else tex.print("\\csname hv@ex@typeout\\endcsname{current file is newer: force run }\\global\\csname hv@extern@forcetrue\\endcsname") end}% \else \hv@ex@typeout{Check, if new file has a different code}% \ShellEscape{hvextern-checkfile "\hvExternFilename\hv@extern@ext" "\hv@extern@ExamplesDir\hvExternFilename\hv@extern@ext"}% \InputIfFileExists{\hvExternFilename\hv@extern@ext.diff}{}{}% \ifx\hvCheckNewFile\empty \hv@ex@typeout{current file is NOT newer: no run }% \global\hv@extern@forcefalse \else \hv@ex@typeout{current file is newer: force run }% \hv@extern@forcetrue \fi \ifhv@extern@verbose\else\ShellEscape{\hv@rm \hvExternFilename\hv@extern@ext.diff}\fi \fi \fi \ifhv@extern@force \ifx\hv@extern@runsequence\@empty \hv@ex@typeout{force=true: running \hv@extern@progpath\hv@extern@compiler\ \hv@run@options \hvExternFilename\hv@extern@ext ...}% \setcounter{@@@runs}{\value{hv@extern@runs}}% \loop\ifnum\the@@@runs > 0\relax \ifcase\hv@extern@compilerNo \relax % we have metapost \hv@ex@typeout{running mpost \hvExternFilename\hv@extern@ext}% \hv@extern@runMP{\hv@extern@progpath}{\hv@extern@compiler}{\hvExternFilename}{\hv@extern@ext}% \or %1 \hv@ex@typeout{running tex \hvExternFilename\hv@extern@ext}% \hv@extern@runTEX{\hv@extern@progpath}{\hv@extern@compiler}{\hvExternFilename}{\hv@extern@ext}% \or %2 \hv@ex@typeout{running \hv@extern@compiler~ \hvExternFilename\hv@extern@ext}% \hv@extern@runLATEX{\hv@extern@progpath}{\hv@extern@compiler}{\hvExternFilename}{\hv@extern@ext}% \else \ifhv@extern@redirect \hv@ex@typeout{running \hv@extern@compiler~ \hvExternFilename\hv@extern@ext > \hvExternFilename.txt}% \ShellEscape{\hv@extern@progpath\hv@extern@compiler\space\hvExternFilename\hv@extern@ext\space > \hvExternFilename.txt}% \else \ifwindows \hv@ex@typeout{running \hv@extern@compiler~\hv@run@options~\hvExternFilename\hv@extern@ext}% \ShellEscape{"\hv@extern@progpath\hv@extern@compiler" \hv@run@options\space\hvExternFilename\hv@extern@ext}% \else \hv@ex@typeout{running \hv@extern@compiler~\hv@run@options~\hvExternFilename\hv@extern@ext}% \ShellEscape{\hv@extern@progpath\hv@extern@compiler\space\hv@run@options\space\hvExternFilename\hv@extern@ext}% \fi \fi \fi \addtocounter{@@@runs}{-1}% \repeat \ifhv@extern@runR % we have Rscript \hv@ex@typeout{copy r-dummy.pdf to \hvExternFilename.pdf}% \ShellEscape{\hv@move\space Rplots.pdf \hvExternFilename.pdf}% \fi \hv@ex@typeout{... done}% \ifhv@extern@biber \ShellEscape{biber \hvExternFilename}% NAch biber nochmal latex \ShellEscape{\hv@extern@progpath\hv@extern@compiler\space\hvExternFilename}% \fi \ifhv@extern@xindex \ShellEscape{xindex \hv@extern@xindexOptions\space \hvExternFilename.idx}% NAch xindex nochmal latex \ShellEscape{\hv@extern@progpath\hv@extern@compiler\space\hvExternFilename}% \fi \expandafter\ifnum\value{hv@extern@runsAfter} > 0 \hv@ex@typeout{runsAfter>0: running \hv@extern@progpath\hv@extern@compiler~ \hvExternFilename\hv@extern@ext ...}% \setcounter{@@@runs}{\value{hv@extern@runsAfter}}% \loop\ifnum\the@@@runs > 0\relax \ifcase\hv@extern@compilerNo \relax % we have metapost \hv@ex@typeout{running mpost \hvExternFilename\hv@extern@ext}% \hv@extern@runMP{\hv@extern@progpath}{\hv@extern@compiler}{\hvExternFilename}{\hv@extern@ext}% \or %1 \hv@ex@typeout{running tex \hvExternFilename\hv@extern@ext}% \hv@extern@runTEX{\hv@extern@progpath}{\hv@extern@compiler}{\hvExternFilename}{\hv@extern@ext}% \or %2 \hv@ex@typeout{running \hv@extern@compiler~ \hvExternFilename\hv@extern@ext}% \hv@extern@runLATEX{\hv@extern@progpath}{\hv@extern@compiler}{\hvExternFilename}{\hv@extern@ext}% \else \ifhv@extern@redirect \hv@ex@typeout{running \hv@extern@compiler~ \hvExternFilename\hv@extern@ext > \hvExternFilename.txt}% \ShellEscape{\hv@extern@progpath\hv@extern@compiler\space\hvExternFilename\hv@extern@ext\space > \hvExternFilename.txt}% \else \ifwindows \hv@ex@typeout{running \hv@extern@compiler~ \hvExternFilename\hv@extern@ext}% \ShellEscape{"\hv@extern@progpath\hv@extern@compiler" \hvExternFilename\hv@extern@ext}% \else \hv@ex@typeout{running \hv@extern@compiler~ \hvExternFilename\hv@extern@ext}% \ShellEscape{\hv@extern@progpath\hv@extern@compiler\space\hvExternFilename\hv@extern@ext}% \fi \fi \fi \addtocounter{@@@runs}{-1}% \repeat \hv@ex@typeout{... done}% \fi \else % runsequence \expandafter\run@hv@extern@sequenceList\expandafter{\hv@extern@runsequence}% \fi \ifhv@extern@crop \ShellEscape{pdfcrop --margins \hv@extern@cropmargin \hvExternFilename}% \ShellEscape{\hv@move \hvExternFilename-crop.pdf \hvExternFilename.pdf}% \fi \ifhv@extern@eps \ShellEscape{pdftops -eps -f 1 -l 1 \hvExternFilename.pdf}% \fi \else % if force ... \hv@ex@typeout{force=false: NOT running \hvExternFilename\hv@extern@ext ...}% \fi% end force \hfuzz=\maxdimen \ifhv@extern@code%-------------- Code Part \vspace{\hv@extern@aboveskip}% \hv@ex@typeout{Starting Code part with preamble ...}% \begingroup \if@twocolumn \ifhv@extern@outerFN \hv@TextWidth=\textwidth \else \hv@TextWidth=\columnwidth \fi \else \hv@TextWidth=\textwidth \fi \ifdim\hv@extern@mpwidth>\z@ \noindent \tcbset{breakable=false}% \minipage[\hv@extern@mpvalign]{\hv@extern@mpwidth} \vspace{0pt}% \else \vspace{\hv@extern@aboveskip}\noindent \fi \ifhv@extern@usefancyvrb \@nameuse{\hv@extern@docType @initPreambleFancy}% \edef\@@@temp{\@nameuse{\hv@extern@docType @initPreamble}}% % we need lstinputlisting, because \VerbatimInput doesn't work in a box \savebox\hv@extern@box{\expandafter\lstinputlisting\expandafter[\@@@temp]{\hvExternFilename\hv@extern@ext}}% \ifdim\wd\hv@extern@box > \z@\relax \expandafter\fvset\expandafter{\hv@extern@lstOptions}% \tcbset{colback=\hv@extern@BGpreamble,colframe=\hv@extern@BOpreamble}% \PreambleVerbatim{\hvExternFilename\hv@extern@ext}% \vspace{\hv@extern@belowpreambleskip}% \fi \else \edef\@@@temp{\@nameuse{\hv@extern@docType @initPreamble}}% \savebox\hv@extern@box{\expandafter\lstinputlisting\expandafter[\@@@temp]{\hvExternFilename\hv@extern@ext}}% \ifdim\wd\hv@extern@box>\z@\relax \expandafter\lstset\expandafter{\hv@extern@lstOptions}% \tcbset{colback=\hv@extern@BGpreamble,colframe=\hv@extern@BOpreamble}% \PreambleListing[\@@@temp]{\hvExternFilename\hv@extern@ext}% \vspace{\hv@extern@belowpreambleskip}% \fi \fi \ifhv@extern@showFilename \hv@ex@typeout{Set filename in the margin!}% \noindent \hfuzz=\maxdimen \hv@marginpar{\hvExternFilename\hv@extern@ext}% \fi % \hv@ex@typeout{Starting Code body ...}%} \ifhv@extern@usefancyvrb \@nameuse{\hv@extern@docType @initTextFancy}% \expandafter\fvset\expandafter{\hv@extern@lstOptions}% \tcbset{colback=\hv@extern@BGbody,colframe=\hv@extern@BObody}% \expandafter\BodyVerbatim\expandafter[\hv@extern@lstOptions]{\hvExternFilename\hv@extern@ext}% \else \expandafter\lstset\expandafter{\hv@extern@lstOptions}% \edef\@@@temp{\@nameuse{\hv@extern@docType @initText}}% \tcbset{colback=\hv@extern@BGbody,colframe=\hv@extern@BObody}% \BodyListing[\@@@temp]{\hvExternFilename\hv@extern@ext}% \fi \ifdim\hv@extern@mpwidth > \z@\relax \endminipage\fi \endgroup \fi % end code part \ifhv@extern@code\else % only if no code \ifhv@extern@showFilename \hv@ex@typeout{Set filename in the margin!}% \noindent \hv@marginpar{\hvExternFilename\hv@extern@ext}% \fi \fi \ifhv@extern@moveToExampleDir % \ShellEscape{mkdir\space\hv@extern@ExamplesDir/}% \hv@ex@typeout{Move file into example dir}% \hv@ex@typeout{\hvExternFilename ----> \hv@extern@ExamplesDir}% \ShellEscape{\hv@move \hvExternFilename.*\space \hv@extern@ExamplesDir}% \fi \ifhv@extern@showoutput \ifhv@extern@includegraphic \ifhv@extern@inline \raisebox{\hv@extern@vshift}{% \expandafter\includegraphics\expandafter[\hv@extern@grfOptions]{\hv@extern@fullPath}}% \else \ifhv@extern@float \hv@ex@typeout{Floating environment}% \expandafter\figure\expandafter[\hv@extern@floatsetting] \else \hv@ex@typeout{No floating environment}% \vspace{\hv@extern@belowbodyskip} \ifdim\hv@extern@mpwidth>\z@ \hfill\minipage[\hv@extern@mpvalign]{\dimexpr\linewidth-\hv@extern@mpwidth-1em\relax}\vspace{0pt}% \else \vspace{\hv@extern@belowbodyskip}\noindent \begingroup \fi \fi \hv@extern@align \hv@ex@typeout{Input image \hv@extern@fullPath}% \ifhv@extern@frame \begingroup \fboxsep=\hv@extern@framesep \expandafter\@for\expandafter\next\expandafter:\expandafter=\hv@extern@pages\do{% \fbox{\expandafter\includegraphics\expandafter[\hv@extern@grfOptions,page=\next]% {\hv@extern@fullPath}}\hspace{\hv@extern@pagesep}}% \hspace*{-\hv@extern@pagesep}% \endgroup \else \expandafter\@for\expandafter\next\expandafter:\expandafter=\hv@extern@pages\do{% \expandafter\includegraphics\expandafter[\hv@extern@grfOptions,page=\next]% {\hv@extern@fullPath}\hspace{\hv@extern@pagesep}}% \hspace*{-\hv@extern@pagesep}% \fi \par% for \hv@extern@align \ifx\hv@extern@caption\@empty\else\caption{\hv@extern@caption}\fi \ifx\hv@extern@label\@empty\else\label{\hv@extern@label}\fi \ifhv@extern@float \endfigure \else \ifdim\hv@extern@mpwidth>\z@ \endminipage\else\endgroup\fi \fi \fi \else% no graphic, only text \ifdim\hv@extern@mpwidth>\z@ \hfill\minipage[t]{\dimexpr\linewidth-\hv@extern@mpwidth-\hv@extern@mpsep\relax}\vspace{0pt} \ifhv@extern@usefancyvrb \expandafter\VerbatimInput\expandafter[\hv@extern@textOptions]{\hv@extern@fullPath.txt}% \else \expandafter\lstinputlisting\expandafter[\hv@extern@textOptions]{\hv@extern@fullPath.txt}% \fi \endminipage \else \vspace{\hv@extern@belowbodyskip}% \noindent \ifhv@extern@usefancyvrb \expandafter\VerbatimInput\expandafter[\hv@extern@textOptions]{\hv@extern@fullPath.txt}% \else \expandafter\lstinputlisting\expandafter[\hv@extern@textOptions]{\hv@extern@fullPath.txt}% \fi \fi \fi \fi% end of \ifshowoutput \ifhv@extern@force \expandafter\run@hv@extern@cleanup\expandafter{\hv@extern@cleanup}% \fi% cleanup \vspace{\hv@extern@belowskip}% \ifhv@extern@save@force@state \global\hv@extern@forcetrue \else \global\hv@extern@forcefalse \fi% restore value } \newcommand\runExtCmd[3][]{% #1:options; #2:comamnd; #3:filename \begingroup \setkeys{hv}{cleanup={},code=false,includegraphic=false,#1}% \xdef\hvExternFilename{#3-\arabic{hv@example@counter}}% \xdef\hv@extern@fullPath{\hv@extern@ExamplesDir\hvExternFilename}% \hv@ex@typeout{running #2}% \ifhv@extern@redirect \ShellEscape{\hv@extern@progpath#2 > \hv@extern@ExamplesDir\hvExternFilename.txt}% \else \ShellEscape{\hv@extern@progpath#2}% \fi \global\stepcounter{hv@example@counter}% %------------------------------------- showoutput ----------------------------------- \ifhv@extern@showoutput \ifhv@extern@includegraphic \ifhv@extern@inline \expandafter\includegraphics\expandafter[\hv@extern@grfOptions]{\hv@extern@ExamplesDir\hvExternFilename}% \else \ifhv@extern@float \hv@ex@typeout{Floating environment}% \expandafter\figure\expandafter[\hv@extern@floatsetting] \else \hv@ex@typeout{No floating environment}% \par\noindent\begingroup \fi \hv@extern@align \hv@ex@typeout{Input image \hv@extern@ExamplesDir\hvExternFilename}% \ifhv@extern@frame \begingroup \fboxsep=\hv@extern@framesep \expandafter\@for\expandafter\next\expandafter:\expandafter=\hv@extern@pages\do{% \fbox{\expandafter\includegraphics\expandafter[\hv@extern@grfOptions,page=\next]{\hv@extern@fullPath}}% \hspace{5pt}}\hspace*{-5pt}% \endgroup \else \expandafter\@for\expandafter\next\expandafter:\expandafter=\hv@extern@pages\do{% \expandafter\includegraphics\expandafter[\hv@extern@grfOptions,page=\next]{\hv@extern@fullPath}% \hspace{5pt}}\hspace*{-5pt}% \fi \ifx\hv@extern@caption\@empty\else\caption{\hv@extern@caption}\fi \ifx\hv@extern@label\@empty\else\label{\hv@extern@label}\fi \ifhv@extern@float \endfigure \else \ifdim\hv@extern@mpwidth>\z@ \endminipage\else\par\endgroup\fi \fi \fi \else% no graphic, only text \ifhv@extern@float \hv@ex@typeout{Floating environment}% \expandafter\figure\expandafter[!htb] \ifhv@extern@usefancyvrb \expandafter\BodyVerbatim\expandafter[\hv@extern@lstOptions]{\hv@extern@fullPath.txt} \else \expandafter\BodyListing\expandafter[\hv@extern@lstOptions,breakatwhitespace]{\hv@extern@fullPath.txt} \fi \ifx\hv@extern@caption\@empty\else\caption{\hv@extern@caption}\fi \ifx\hv@extern@label\@empty\else\label{\hv@extern@label}\fi \endfigure \else \noindent \ifhv@extern@usefancyvrb \expandafter\BodyVerbatim\expandafter[\hv@extern@lstOptions]{\hv@extern@fullPath.txt} \else \hv@extern@tcboxfalse \expandafter\BodyListing\expandafter[\hv@extern@lstOptions,breaklines,breakatwhitespace]{\hv@extern@fullPath.txt} \fi \fi \fi \fi% end \ifshowoutput \ifhv@extern@force\expandafter\run@hv@extern@cleanup\expandafter{\hv@extern@cleanup}\fi% cleanup \endgroup } \def\WriteVerb{\FV@Environment{}{WriteVerb}} \def\FVB@WriteVerb#1{% \@bsphack \begingroup \FV@UseKeyValues \FV@DefineWhiteSpace \def\FV@Space{\space}% \FV@DefineTabOut \def\FV@ProcessLine{\immediate\write\FV@OutFile}% \immediate\openout\FV@OutFile #1\relax \let\FV@FontScanPrep\relax \let\@noligs\relax \FV@Scan} \def\FVE@WriteVerb{\immediate\closeout\FV@OutFile\endgroup\@esphack} \DefineVerbatimEnvironment{WriteVerb}{WriteVerb}{} \begingroup \catcode`\^^M=\active \gdef\FV@BeginScanning#1^^M{% \def\@tempa{#1}\ifx\@tempa\@empty\else\FV@BadBeginError\fi% <------ \FV@GetLine}% \gdef\FancyVerbGetLine#1^^M{% \@nil \FV@CheckEnd{#1}% \ifx\@tempa\FV@EnvironName% % True if end is found \ifx\@tempb\FV@@@CheckEnd\else\FV@BadEndError\fi% \let\next\FV@EndScanning% \else% \def\FV@Line{#1}% \def\next{\FV@PreProcessLine\FV@GetLine}% \fi% \next}% \endgroup {\catcode`\ =12 \gdef\FancyVerbSpace{\ttfamily }} \newcommand\BeginPSTcode{% \nobreak \VerbatimEnvironment \catcode`\<=12 \begin{VerbatimOut}{\EX@dir\EX@prefix\theEX@ct.\EX@suffix}} % \newcommand\EndPSTcode{% \end{VerbatimOut} \global\let\Preamble@Commands\@empty \global\let\Hidden@Preamble@Commands\@empty \global\let\Require@Packages\@empty } % \renewcommand\FVE@VerbatimOut{% \Write@Postamble \immediate\closeout\FV@OutFile\endgroup\@esphack} \newcommand\hv@Write@EX[1]{% \begingroup \let\protect\@unexpandable@protect \edef\reserved@a{\immediate\write\FV@OutFile{#1}}% \reserved@a \endgroup} \newcommand\hv@Write@EXOne[1]{{% \@temptokena\expandafter{#1}% \immediate\write\FV@OutFile{\the\@temptokena}}} \renewcommand\FVB@VerbatimOut[1]{% \@bsphack \begingroup \FV@UseKeyValues% \FV@DefineWhiteSpace% \def\FV@Space{\space}% \FV@DefineTabOut% \def\FV@ProcessLine##1{\toks@{##1}\immediate\write\FV@OutFile{\the\toks@}}% \immediate\openout\FV@OutFile #1\relax% \Write@Preamble \let\FV@FontScanPrep\relax \let\@noligs\relax% \FV@Scan} % \newcommand\Write@Preamble@PST{% \hv@Write@EX{\string\documentclass[pstricks]{standalone}}% \hv@Write@EX{\string\pagestyle{empty}}% \ifx\Preamble@Commands\@empty\else \hv@Write@EX{\Preamble@Commands}% \fi \hv@Write@EX{\string\begin{document}}% } % %\hv@extern@ExampleType{ltx} % {\Write@Preamble@LaTeX} % {\hv@Write@EX{\string\end{document}}} % {\string\begin{document}} % {\string\end{document}} % {\perCent StartShownPreambleCommands} % {\perCent StopShownPreambleCommands} \newenvironment{createPNGfromPSTricks}[3][]% #1:options #2: pstricks packages #3: filename {% \xdef\hvExternFilename{#2-\arabic{hv@example@counter}}% \gdef\hv@extern@savePara{#1}% \setkeys{hv}{#1}% \begin \hv@ex@typeout{External filename: \hvExternFilename}% \expandafter\IfFileExists\expandafter{\hv@extern@ExamplesDir\hvExternFilename.pdf}{}{% \expandafter\IfFileExists\expandafter{\hv@extern@ExamplesDir\hvExternFilename.png}{}{% \expandafter\IfFileExists\expandafter{\hv@extern@ExamplesDir\hvExternFilename.txt}{}{% \gdef\hv@extern@save@force@state{} \global\hv@extern@forcetrue}}}% set force, if no pdf or png exists \begingroup \hv@ex@typeout{writing file \hvExternFilename\hv@extern@ext ...}% \filecontents[force,noheader]{\hvExternFilename\hv@extern@ext}% } {\endfilecontents% \end% \hv@ex@typeout{... done}% \global\stepcounter{hv@example@counter}% \endgroup \expandafter\hvExternSetKeys\expandafter{\hv@extern@savePara}% \xdef\hv@extern@fullPath{\hv@extern@ExamplesDir\hvExternFilename}% \ifhv@extern@checkCode \ifluatex \directlua{if GetFileContents("\hvExternFilename\hv@extern@ext", "\hv@extern@ExamplesDir\hvExternFilename\hv@extern@ext") then tex.print("\\csname hv@ex@typeout\\endcsname{current file is NOT newer: no run }\\global\\csname hv@extern@forcefalse\\endcsname") else tex.print("\\csname hv@ex@typeout\\endcsname{current file is newer: force run }\\global\\csname hv@extern@forcetrue\\endcsname") end}% \else \hv@ex@typeout{Check, if new file has a different code}% \ShellEscape{hvextern-checkfile "\hvExternFilename\hv@extern@ext" "\hv@extern@ExamplesDir\hvExternFilename\hv@extern@ext"}% \InputIfFileExists{\hvExternFilename\hv@extern@ext.diff}{}{}% \ifx\hvCheckNewFile\empty \hv@ex@typeout{current file is NOT newer: no run }% \global\hv@extern@forcefalse \else \hv@ex@typeout{current file is newer: force run }% \global\hv@extern@forcetrue \fi \ifhv@extern@verbose\else\hv@rm{\hvExternFilename\hv@extern@ext.diff}\fi \fi \fi \ifhv@extern@force \ifx\hv@extern@runsequence\@empty \hv@ex@typeout{force=true: running \hv@extern@progpath\hv@extern@compiler~ \hvExternFilename\hv@extern@ext ...}% \setcounter{@@@runs}{\value{hv@extern@runs}}% \loop\ifnum\the@@@runs > 0\relax \ifcase\hv@extern@compilerNo \relax % we have metapost \hv@ex@typeout{running mpost \hvExternFilename\hv@extern@ext}% \hv@extern@runMP{\hv@extern@progpath}{\hv@extern@compiler}{\hvExternFilename}{\hv@extern@ext}% \or %1 \hv@ex@typeout{running tex \hvExternFilename\hv@extern@ext}% \hv@extern@runTEX{\hv@extern@progpath}{\hv@extern@compiler}{\hvExternFilename}{\hv@extern@ext}% \or %2 \hv@ex@typeout{running \hv@extern@compiler~ \hvExternFilename\hv@extern@ext}% \hv@extern@runLATEX{\hv@extern@progpath}{\hv@extern@compiler}{\hvExternFilename}{\hv@extern@ext}% \else \ifhv@extern@redirect \hv@ex@typeout{running \hv@extern@compiler~ \hvExternFilename\hv@extern@ext > \hvExternFilename.txt}% \ShellEscape{\hv@extern@progpath\hv@extern@compiler\space\hvExternFilename\hv@extern@ext\space > \hvExternFilename.txt}% \else \hv@ex@typeout{running \hv@extern@compiler~ \hvExternFilename\hv@extern@ext}% \ShellEscape{\hv@extern@progpath\hv@extern@compiler\space\hvExternFilename\hv@extern@ext}% \fi \fi \addtocounter{@@@runs}{-1}% \repeat \hv@ex@typeout{... done}% \ifhv@extern@biber \ShellEscape{biber \hvExternFilename}% NAch biber nochmal latex \ShellEscape{\hv@extern@progpath\hv@extern@compiler\space\hvExternFilename}% \fi \ifhv@extern@xindex \ShellEscape{xindex \hv@extern@xindexOptions\space \hvExternFilename.idx}% NAch xindex nochmal latex \ShellEscape{\hv@extern@progpath\hv@extern@compiler\space\hvExternFilename}% \fi \else % runsequence \expandafter\run@hv@extern@sequenceList\expandafter{\hv@extern@runsequence}% \fi \ifhv@extern@crop \ShellEscape{pdfcrop --margins \hv@extern@cropmargin \hvExternFilename}% \ShellEscape{\hv@move \hvExternFilename-crop.pdf \hvExternFilename.pdf}% \fi \ifhv@extern@eps \ShellEscape{pdftops -eps -f 1 -l 1 \hvExternFilename.pdf}% \fi \else \hv@ex@typeout{force=false: NOT running \hvExternFilename\hv@extern@ext ...}% \fi% end force \hfuzz=\maxdimen \ifhv@extern@code%-------------- Code Part \hv@ex@typeout{Starting Code part with preamble ...}% \begingroup \if@twocolumn \ifhv@extern@outerFN \hv@TextWidth=\textwidth \else \hv@TextWidth=\columnwidth \fi \else \hv@TextWidth=\textwidth \fi \ifdim\hv@extern@mpwidth>\z@ \noindent \tcbset{breakable=false}% \minipage[\hv@extern@mpvalign]{\hv@extern@mpwidth} \vspace{0pt}% \else \vspace{\hv@extern@aboveskip}\noindent \fi \ifhv@extern@usefancyvrb \@nameuse{\hv@extern@docType @initPreambleFancy}% \edef\@@@temp{\@nameuse{\hv@extern@docType @initPreamble}}% % we need lstinputlisting, because \VerbatimInput doesn't work in a box \savebox\hv@extern@box{\expandafter\lstinputlisting\expandafter[\@@@temp]{\hvExternFilename\hv@extern@ext}}% \ifdim\wd\hv@extern@box > \z@\relax \expandafter\fvset\expandafter{\hv@extern@lstOptions}% \tcbset{colback=\hv@extern@BGpreamble,colframe=\hv@extern@BOpreamble}% \PreambleVerbatim{\hvExternFilename\hv@extern@ext}% \vspace{\hv@extern@belowpreambleskip}% \fi \else \edef\@@@temp{\@nameuse{\hv@extern@docType @initPreamble}}% \savebox\hv@extern@box{\expandafter\lstinputlisting\expandafter[\@@@temp]{\hvExternFilename\hv@extern@ext}}% \ifdim\wd\hv@extern@box>\z@\relax \expandafter\lstset\expandafter{\hv@extern@lstOptions}% \tcbset{colback=\hv@extern@BGpreamble,colframe=\hv@extern@BOpreamble}% \PreambleListing[\@@@temp]{\hvExternFilename\hv@extern@ext}% \vspace{\hv@extern@belowpreambleskip}% \fi \fi \ifhv@extern@showFilename \hv@ex@typeout{Set filename in the margin!}% \noindent \hfuzz=\maxdimen \hv@marginpar{\hvExternFilename\hv@extern@ext}% \fi % \hv@ex@typeout{Starting Code body ...}%} \ifhv@extern@usefancyvrb \@nameuse{\hv@extern@docType @initTextFancy}% \expandafter\fvset\expandafter{\hv@extern@lstOptions}% \tcbset{colback=\hv@extern@BGbody,colframe=\hv@extern@BObody}% \expandafter\BodyVerbatim\expandafter[\hv@extern@lstOptions]{\hvExternFilename\hv@extern@ext}% \else \expandafter\lstset\expandafter{\hv@extern@lstOptions}% \edef\@@@temp{\@nameuse{\hv@extern@docType @initText}}% \tcbset{colback=\hv@extern@BGbody,colframe=\hv@extern@BObody}% \BodyListing[\@@@temp]{\hvExternFilename\hv@extern@ext}% \fi \ifdim\hv@extern@mpwidth > \z@\relax \endminipage\fi \endgroup \fi % end code part \ifhv@extern@code\else % only if no code \ifhv@extern@showFilename \hv@ex@typeout{Set filename in the margin!}% \noindent \hv@marginpar{\hvExternFilename\hv@extern@ext}% \fi \fi \ifhv@extern@moveToExampleDir % \ShellEscape{mkdir\space\hv@extern@ExamplesDir/}% \hv@ex@typeout{Move file into example dir}% \hv@ex@typeout{\hvExternFilename.* ----> \hv@extern@ExamplesDir}% \ShellEscape{\hv@move \hvExternFilename.*\space \hv@extern@ExamplesDir}% \fi \ifhv@extern@showoutput \ifhv@extern@includegraphic \ifhv@extern@inline \expandafter\includegraphics\expandafter[\hv@extern@grfOptions]{\hv@extern@fullPath}% \else \ifhv@extern@float \hv@ex@typeout{Floating environment}% \expandafter\figure\expandafter[\hv@extern@floatsetting] \else \hv@ex@typeout{No floating environment}% \vspace{\hv@extern@belowbodyskip} \ifdim\hv@extern@mpwidth>\z@ \hfill\minipage[\hv@extern@mpvalign]{\dimexpr\linewidth-\hv@extern@mpwidth-1em\relax}\vspace{0pt}% \else \vspace{\hv@extern@belowbodyskip}\noindent \begingroup \fi \fi \hv@extern@align \hv@ex@typeout{Input image \hv@extern@fullPath}% \ifhv@extern@frame \begingroup \fboxsep=\hv@extern@framesep \expandafter\@for\expandafter\next\expandafter:\expandafter=\hv@extern@pages\do{% \fbox{\expandafter\includegraphics\expandafter[\hv@extern@grfOptions,page=\next]% {\hv@extern@fullPath}}\hspace{\hv@extern@pagesep}}% \hspace*{-\hv@extern@pagesep}% \endgroup \else \expandafter\@for\expandafter\next\expandafter:\expandafter=\hv@extern@pages\do{% \expandafter\includegraphics\expandafter[\hv@extern@grfOptions,page=\next]% {\hv@extern@fullPath}\hspace{\hv@extern@pagesep}}% \hspace*{-\hv@extern@pagesep}% \fi \par% for \hv@extern@align \ifx\hv@extern@caption\@empty\else\caption{\hv@extern@caption}\fi \ifx\hv@extern@label\@empty\else\label{\hv@extern@label}\fi \ifhv@extern@float \endfigure \else \ifdim\hv@extern@mpwidth>\z@ \endminipage\else\endgroup\fi \fi \fi \else% no graphic, only text \ifdim\hv@extern@mpwidth>\z@ \hfill\minipage[t]{\dimexpr\linewidth-\hv@extern@mpwidth-\hv@extern@mpsep\relax}\vspace{0pt} \ifhv@extern@usefancyvrb \expandafter\VerbatimInput\expandafter[\hv@extern@textOptions]{\hv@extern@fullPath.txt}% \else \expandafter\lstinputlisting\expandafter[\hv@extern@textOptions]{\hv@extern@fullPath.txt}% \fi \endminipage \else \vspace{\hv@extern@belowbodyskip}% \noindent \ifhv@extern@usefancyvrb \expandafter\VerbatimInput\expandafter[\hv@extern@textOptions]{\hv@extern@fullPath.txt}% \else \expandafter\lstinputlisting\expandafter[\hv@extern@textOptions]{\hv@extern@fullPath.txt}% \fi \fi \fi \fi% end of \ifshowoutput \ifhv@extern@force\expandafter\run@hv@extern@cleanup\expandafter{\hv@extern@cleanup}\fi% cleanup \vspace{\hv@extern@belowskip}% } \stepcounter{hv@example@counter}% % %% \endinput