diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /usergrps/dante/dtk/dtk-extern.sty |
Initial commit
Diffstat (limited to 'usergrps/dante/dtk/dtk-extern.sty')
-rw-r--r-- | usergrps/dante/dtk/dtk-extern.sty | 231 |
1 files changed, 231 insertions, 0 deletions
diff --git a/usergrps/dante/dtk/dtk-extern.sty b/usergrps/dante/dtk/dtk-extern.sty new file mode 100644 index 0000000000..f9f63c0df7 --- /dev/null +++ b/usergrps/dante/dtk/dtk-extern.sty @@ -0,0 +1,231 @@ +%% This is file `dtk-extern.sty', +%% +%% LaTeX package for ``Die TeXnische Komoedie''. +%% +%% Copyright (C) 2016-19 +%% Rolf Niepraschk, Herbert Voss +%% +%% It may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3c +%% 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. + +\ProvidesFile{dtk-extern}% + [2019/08/09 v0.13: dtk package for running external documents (HV)] + +\RequirePackage{shellesc,filecontents,xkeyval,graphicx,marginnote,fancyvrb} + +\newcounter{dtk@extern@runs} +\newlength\dtk@extern@mpwidth \setlength\dtk@extern@mpwidth{\z@} + +\define@key{dtk}{compiler}[pdflatex]{\def\dtk@extern@compiler{#1}} +\define@key{dtk}{runsequence}[]{\def\dtk@extern@runsequence{#1}} +\define@key{dtk}{runs}[1]{\setcounter{dtk@extern@runs}{#1}} +\define@key{dtk}{grfOptions}[]{\def\dtk@extern@grfOptions{#1}} +\define@key{dtk}{lstOptions}[]{\def\dtk@extern@lstOptions{#1}} +\define@key{dtk}{docType}[latex]{\def\dtk@extern@docType{#1}} +\define@key{dtk}{caption}[]{\def\dtk@extern@caption{#1}} +\define@key{dtk}{label}[]{\def\dtk@extern@label{#1}} +\define@key{dtk}{pages}[1]{\def\dtk@extern@pages{#1}} +\define@key{dtk}{mpwidth}[0pt]{\setlength\dtk@extern@mpwidth{#1}} +\define@boolkey{dtk}[dtk@extern@]{usefancyvrb}[true]{} +\define@boolkey{dtk}[dtk@extern@]{showFilename}[true]{} +\define@boolkey{dtk}[dtk@extern@]{code}[true]{} +\define@boolkey{dtk}[dtk@extern@]{force}[true]{} +\define@boolkey{dtk}[dtk@extern@]{crop}[true]{} +\define@boolkey{dtk}[dtk@extern@]{biber}[true]{} +\define@boolkey{dtk}[dtk@extern@]{xindex}[true]{} +\define@key{dtk}{xindexOptions}[]{\def\dtk@extern@xindexOptions{#1}} +\define@boolkey{dtk}[dtk@extern@]{includegraphic}[true]{} +\define@boolkey{dtk}[dtk@extern@]{inline}[true]{} +\define@boolkey{dtk}[dtk@extern@]{frame}[true]{} +\define@boolkey{dtk}[dtk@extern@]{float}[true]{} +\define@boolkey{dtk}[dtk@extern@]{cleanup}[true]{} +\define@boolkey{dtk}[dtk@extern@]{copyToExampleDir}[true]{} +\define@key{dtk}{align}[\centering]{\def\dtk@extern@align{#1}} +\define@key{dtk}{ExamplesDir}[Examples]{\def\dtk@extern@ExamplesDir{#1}} + +\def\ResetKeys{% + \setkeys{dtk}{ + showFilename=false,% Dateinamen im Rand angeben + code=false,% show Code + crop=false,% erzeugte PDF "croppen" + compiler=pdflatex,% zu verwendener Compiler + grfOptions={},% Optionen der einzubindenden Grafik + lstOptions={},% Optionen für das Listing + includegraphic=true,% Grafik einbinden oder User überlassen + inline=false,% Grafik nicht in derselben Zeile + runs=1,% Anzahl Compiler-Durchläufe + runsequence={},% Im Moment nicht aktiv + biber=false,% Biber laufen lassen? + xindex=false,% xindex laufen lassen? + xindexOptions={},% options for xindex + force=false,% Compiler, auch wenn PDF existiert? + frame=false,% keinen Rahmen um Abbildung + float=false,% nicht als Gleitumgebung + caption=,% keine Caption + label=,% kein Label + pages=1,% welche Seiten auszugeben sind + docType=latex,% LaTeX example Code + cleanup=false,% Hilfsdateien nicht löschen + copyToExampleDir,% Kopie nach ExamplesDir + ExamplesDir=Examples,% Unterverzeichnis für Beispiele + align=\centering,% Ausgabe zentrieren + mpwidth=0pt,% no minipage + usefancyvrb=false,% use VerbatimInput instead of listings + } +} +\ResetKeys + +{\catcode`\%=12 + \gdef\perCent{%} + \gdef\DoubleperCent{%%} +} + +\newcounter{dtk@example@counter} + +\newcommand\extern@ExampleType[5]{% + \ifdtk@extern@usefancyvrb + \@namedef{#1@initText}{\gdef\FancyVerbStartString{#2}\gdef\FancyVerbStopString{#3}}% text + \@namedef{#1@initPreamble}{\gdef\FancyVerbStartString{#4}\gdef\FancyVerbStopString{#5}}% code + \else + \@namedef{#1@initText}{linerange=#2-#3,includerangemarker=false}% text + \@namedef{#1@initPreamble}{linerange=#4-#5,includerangemarker=false}% code + \fi +} + +\extern@ExampleType{latex}% #1 + {\string\begin\string{document\string}}% #2 + {\string\end\string{document\string}}% #3 + {\perCent StartVisiblePreamble}% #4 + {\perCent StopVisiblePreamble}% #5 + +\extern@ExampleType{context} + {\string\starttext} + {\string\stoptext} + {\perCent StartVisiblePreamble} + {\perCent StopVisiblePreamble} + +%% +%% [#1]: Optionen #2: Dateiname +%% +\newenvironment{ErstelleGrafik}[2][]{% + \xdef\dtkExternDateiname{#2-\arabic{dtk@example@counter}}% + \typeout{Externer Dateiname: \dtkExternDateiname}% + \global\setkeys{dtk}{#1}% \begin + \expandafter\IfFileExists\expandafter{\dtkExternDateiname.pdf}{}{\setkeys{dtk}{force}}% + \begingroup + \@nameuse{filecontents*}{\dtkExternDateiname.tex} + } + {\@nameuse{endfilecontents*}% \end + \ifdtk@extern@copyToExampleDir + \ShellEscape{cp\space\dtkExternDateiname.tex \dtk@extern@ExamplesDir/}% + \fi + \global\stepcounter{dtk@example@counter}% + \endgroup + \ifdtk@extern@force + \loop\ifnum\thedtk@extern@runs>0 + \typeout{Run: \thedtk@extern@runs\space \dtk@extern@compiler\space\dtkExternDateiname}% + \ShellEscape{\dtk@extern@compiler\space\dtkExternDateiname}% + \addtocounter{dtk@extern@runs}{-1}% + \repeat + \fi + \ifdtk@extern@code + \ifdim\dtk@extern@mpwidth>\z@ \minipage[t]{\dtk@extern@mpwidth}\vspace{0pt}\fi + \expandafter\edef\expandafter\dtk@lst@options@preamble\expandafter{% + \@nameuse{\dtk@extern@docType @initPreamble}, + \dtk@extern@lstOptions, + backgroundcolor=\noexpand\color{black!12}}% + \ifdtk@extern@usefancyvrb + \expandafter\VerbatimInput\expandafter[\dtk@lst@options@preamble]{\dtkExternDateiname}% + \else + \expandafter\lstinputlisting\expandafter[\dtk@lst@options@preamble]{\dtkExternDateiname}% + \fi + \ifdtk@extern@showFilename + \marginnote{\rotatebox{90}{\dtkExternDateiname}}%[-15mm]% + \fi +% + \expandafter\edef\expandafter\dtk@lst@options@text\expandafter{% + \@nameuse{\dtk@extern@docType @initText}, + \dtk@extern@lstOptions, + backgroundcolor=\noexpand\color{black!8}}% +% \typeout{\dtk@lst@options@text} + \ifdtk@extern@usefancyvrb + \expandafter\VerbatimInput\expandafter[\dtk@lst@options@text]{\dtkExternDateiname}% + \else + \expandafter\lstinputlisting\expandafter[\dtk@lst@options@text]{\dtkExternDateiname}% + \fi + \ifdim\dtk@extern@mpwidth > \z@\relax \endminipage\fi + \fi + \expandafter\IfFileExists\expandafter{\dtkExternDateiname.pdf}% + {\ifdtk@extern@force + \ifdtk@extern@biber + \ShellEscape{biber \dtkExternDateiname}% NAch biber nochmal latex + \ShellEscape{\dtk@extern@compiler\space\dtkExternDateiname}% + \fi + \ifdtk@extern@xindex + \ShellEscape{xindex \dtk@extern@xindexOptions\space \dtkExternDateiname.idx}% NAch xindex nochmal latex + \ShellEscape{\dtk@extern@compiler\space\dtkExternDateiname}% + \fi + \ifdtk@extern@crop + \ShellEscape{pdfcrop \dtkExternDateiname}% + \ShellEscape{mv \dtkExternDateiname-crop.pdf \dtkExternDateiname.pdf}% + \fi + \fi + }{} + \ifdtk@extern@code\else + \ifdtk@extern@showFilename + \marginnote{\rotatebox{90}{\dtkExternDateiname}}% + \fi + \fi +% + \ifdtk@extern@includegraphic + \ifdtk@extern@float + \begin{figure}[!htb] + \else + \ifdim\dtk@extern@mpwidth>\z@ + \hfill\minipage[t]{\dimexpr\linewidth-\dtk@extern@mpwidth-1em\relax}\vspace{0pt} + \else + \ifdtk@extern@inline\else\par\fi\begingroup + \fi + \fi + \dtk@extern@align + \ifdtk@extern@frame + \expandafter\@for\expandafter\next\expandafter:\expandafter=\dtk@extern@pages\do{% + \fbox{\expandafter\includegraphics\expandafter[\dtk@extern@grfOptions,page=\next]{\dtkExternDateiname}}% + \hspace{5pt}}\hspace*{-5pt} +% \fbox{\expandafter\includegraphics\expandafter[\dtk@extern@grfOptions]{\dtkExternDateiname}}% + \else + \expandafter\@for\expandafter\next\expandafter:\expandafter=\dtk@extern@pages\do{% + \expandafter\includegraphics\expandafter[\dtk@extern@grfOptions,page=\next]{\dtkExternDateiname}% + \hspace{5pt}}\hspace*{-5pt} +% \expandafter\includegraphics\expandafter[\dtk@extern@grfOptions]{\dtkExternDateiname}% + \fi + \ifx\dtk@extern@caption\@empty\else\caption{\dtk@extern@caption}\fi + \ifx\dtk@extern@label\@empty\else\label{\dtk@extern@label}\fi + \ifdtk@extern@float + \end{figure} + \else + \ifdim\dtk@extern@mpwidth>\z@ + \endminipage + \else + \par\endgroup + \fi + \fi + \fi + \ifdtk@extern@cleanup + \ShellEscape{rm \dtkExternDateiname.log}% + \ShellEscape{rm \dtkExternDateiname.aux}% + \ShellEscape{rm \dtkExternDateiname.toc}% +% \ShellEscape{rm \dtkExternDateiname.log}% + \fi + \global\ResetKeys} +\stepcounter{dtk@example@counter}% +% +\let\externalDocument\ErstelleGrafik +\let\endexternalDocument\endErstelleGrafik +%% +\endinput |