Ich habe ein neues l3build basiertes Projekt aufgesetzt. Beim Auspacken werden aus der dtx-Datei drei Dateien erzeugt: makelabels.lco, makelabels-example.tex und makelabels-envlab-example.tex. Beim Erzeugen der Doku müssten nun zuerst via LaTeX-Läufe aus makelabels-example.tex und makelabels-envlab-example.tex zwei PDFs generiert werden. Diese werden beim LaTeX-Lauf von makelabels.dtx als Bilder eingebunden. Zu diesem Zweck habe ich in der build.lua:
unpackfiles = { "makelabels.dtx" }
installfiles = { "makelabels.lco" }
sourcefiles = { "makelabels.dtx" }
typesetdemofiles = { "makelabels-example.tex", "makelabels-envlab-example.tex" }
demofiles = { "makelabels-example.tex", "makelabels-envlab-example.tex",
"makelabels-example.pdf", "makelabels-envlab-example.pdf" }
docfiles = { "makelabels-example.pdf", "makelabels-envlab-example.pdf" }
eingetragen. Es funktioniert auch, dass die beiden LaTeX-Läufe für makelabels-example.tex und makelabels-envlab-example.tex vor dem LaTeX-Lauf von makelabels.dtx stattfinden. Allerdings landen die PDFs davon nur in build/unpacked und im Hauptverzeichnis. Sie sind weder in build/local noch in build/doc zu finden. Der LaTeX-Lauf von makelabels.dtx schlägt dann fehl, weil die beiden PDFs makelabels-example.pdf und makelabels-envlab-example.pdf nicht gefunden werden.
Erst beim nächsten l3build doc werden die beiden Dateien aus dem Hauptverzeichnis vor dem LaTeX-Lauf von makelabels.dtx nach build/doc kopiert, so dass die Doku korrekt erzeugt werden kann. Nach einem l3build clean beginnt das Drama aber wieder von vorn.
Langer Rede kurzer Sinn: Gibt es eine Möglichkeit, l3build zu erklären, dass die beiden Dateien makelabels-example.pdf und makelabels-envlab-example.pdf nicht nur vor dem LaTeX-Lauf der Doku makelabels.dtx generiert werden müssten, sondern für diesen LaTeX-Lauf auch benötigt werden?
Ein Minimalbeispiel für die von mir verwendete build.lua sähe so aus:
#!/usr/bin/env texlua
-- Bundle and modules
module = "generatedpdftest"
unpackfiles = { "generatedpdftest.dtx" }
installfiles = { "generatedpdftest.sty" }
sourcefiles = { "generatedpdftest.dtx" }
typesetdemofiles = { "demo.tex" }
demofiles = { "demo.tex", "demo.pdf" }
docfiles = { "demo.pdf" }
-- Package
packtdszip = false
-- Find and run build system
kpse.set_program_name("kpsewhich")
if not release_date then
dofile(kpse.lookup("l3build.lua"))
end
Die zugehörige generatedpdftest.dtx wäre:
% \iffalse^^A meta-comment
% ======================================================================
% generatedpdftext.dtx
% ======================================================================
%<*dtx>
\ifx\documentclass\undefined
\input l3docstrip.tex
\generate{%
\usedir{doc/latex/generatedpdftest}
\file{generatedpdftest.sty}{\from{generatedpdftest.dtx}{package}}
\file{demo.tex}{\from{generatedpdftest.dtx}{exmpl}}
}
\else
\let\endbatchfile\relax
\fi
\endbatchfile
\documentclass{l3doc}
\usepackage{graphicx}
\GetFileInfo{generatedpdftest.dtx}
\begin{document}
\title{Demonstration of the problem}
\date{\fileversion{} \filedate}
\author{Markus Kohm}
\maketitle
\tableofcontents
\DocInput{\filename}
\end{document}
%</dtx>
% \fi^^A meta-comment
%
% \section{Demonstration}
%
% Here I try to load the PDF of the generated demo file.
%
% \fbox{\includegraphics[scale=.3]{demo.pdf}}
%
% But this fails for the first \texttt{l3build doc}
% (and after a \texttt{l3build clean}).
%
% \section{Implementation}
%
% \begin{macrocode}
%<*exmpl>
\documentclass{article}
\begin{document}
The demo file.
\end{document}
%</exmpl>
%<*package>
\relax
%</package>
% \end{macrocode}
%
% \Finale
%
\endinput
Sehr viel kürzer geht es leider nicht. Außerdem kann der Online-Compiler das natürlich nicht verabeiten. Deshalb ist es vermutlich einfacher, makelabels.dtx und build.lua direkt aus dem github-Projekt zu holen. Da passen die Namen der Dateien dann auch zu obiger Beschreibung.
Ich habe ein neues [ctan]l3build[/ctan] basiertes Projekt aufgesetzt. Beim Auspacken werden aus der [tt]dtx[/tt]-Datei drei Dateien erzeugt: [tt]makelabels.lco[/tt], [tt]makelabels-example.tex[/tt] und [tt]makelabels-envlab-example.tex[/tt]. Beim Erzeugen der Doku müssten nun zuerst via LaTeX-Läufe aus [tt]makelabels-example.tex[/tt] und [tt]makelabels-envlab-example.tex[/tt] zwei PDFs generiert werden. Diese werden beim LaTeX-Lauf von [tt]makelabels.dtx[/tt] als Bilder eingebunden. Zu diesem Zweck habe ich in der [tt]build.lua[/tt]:
[code]
unpackfiles = { "makelabels.dtx" }
installfiles = { "makelabels.lco" }
sourcefiles = { "makelabels.dtx" }
typesetdemofiles = { "makelabels-example.tex", "makelabels-envlab-example.tex" }
demofiles = { "makelabels-example.tex", "makelabels-envlab-example.tex",
"makelabels-example.pdf", "makelabels-envlab-example.pdf" }
docfiles = { "makelabels-example.pdf", "makelabels-envlab-example.pdf" }
[/code]
eingetragen. Es funktioniert auch, dass die beiden LaTeX-Läufe für [tt]makelabels-example.tex[/tt] und [tt]makelabels-envlab-example.tex[/tt] vor dem LaTeX-Lauf von [tt]makelabels.dtx[/tt] stattfinden. Allerdings landen die PDFs davon nur in [tt]build/unpacked[/tt] und im Hauptverzeichnis. Sie sind weder in [tt]build/local[/tt] noch in [tt]build/doc[/tt] zu finden. Der LaTeX-Lauf von [tt]makelabels.dtx[/tt] schlägt dann fehl, weil die beiden PDFs [tt]makelabels-example.pdf[/tt] und [tt]makelabels-envlab-example.pdf[/tt] nicht gefunden werden.
Erst beim nächsten [tt]l3build doc[/tt] werden die beiden Dateien aus dem Hauptverzeichnis vor dem LaTeX-Lauf von [tt]makelabels.dtx[/tt] nach [tt]build/doc[/tt] kopiert, so dass die Doku korrekt erzeugt werden kann. Nach einem [tt]l3build clean[/tt] beginnt das Drama aber wieder von vorn.
Langer Rede kurzer Sinn: Gibt es eine Möglichkeit, [tt]l3build[/tt] zu erklären, dass die beiden Dateien [tt]makelabels-example.pdf[/tt] und [tt]makelabels-envlab-example.pdf[/tt] nicht nur vor dem LaTeX-Lauf der Doku [tt]makelabels.dtx[/tt] generiert werden müssten, sondern für diesen LaTeX-Lauf auch benötigt werden?
Ein Minimalbeispiel für die von mir verwendete [tt]build.lua[/tt] sähe so aus:
[code]
#!/usr/bin/env texlua
-- Bundle and modules
module = "generatedpdftest"
unpackfiles = { "generatedpdftest.dtx" }
installfiles = { "generatedpdftest.sty" }
sourcefiles = { "generatedpdftest.dtx" }
typesetdemofiles = { "demo.tex" }
demofiles = { "demo.tex", "demo.pdf" }
docfiles = { "demo.pdf" }
-- Package
packtdszip = false
-- Find and run build system
kpse.set_program_name("kpsewhich")
if not release_date then
dofile(kpse.lookup("l3build.lua"))
end
[/code]
Die zugehörige [tt]generatedpdftest.dtx[/tt] wäre:
[code]
% \iffalse^^A meta-comment
% ======================================================================
% generatedpdftext.dtx
% ======================================================================
%<*dtx>
\ifx\documentclass\undefined
\input l3docstrip.tex
\generate{%
\usedir{doc/latex/generatedpdftest}
\file{generatedpdftest.sty}{\from{generatedpdftest.dtx}{package}}
\file{demo.tex}{\from{generatedpdftest.dtx}{exmpl}}
}
\else
\let\endbatchfile\relax
\fi
\endbatchfile
\documentclass{l3doc}
\usepackage{graphicx}
\GetFileInfo{generatedpdftest.dtx}
\begin{document}
\title{Demonstration of the problem}
\date{\fileversion{} \filedate}
\author{Markus Kohm}
\maketitle
\tableofcontents
\DocInput{\filename}
\end{document}
%</dtx>
% \fi^^A meta-comment
%
% \section{Demonstration}
%
% Here I try to load the PDF of the generated demo file.
%
% \fbox{\includegraphics[scale=.3]{demo.pdf}}
%
% But this fails for the first \texttt{l3build doc}
% (and after a \texttt{l3build clean}).
%
% \section{Implementation}
%
% \begin{macrocode}
%<*exmpl>
\documentclass{article}
\begin{document}
The demo file.
\end{document}
%</exmpl>
%<*package>
\relax
%</package>
% \end{macrocode}
%
% \Finale
%
\endinput
[/code]
Sehr viel kürzer geht es leider nicht. Außerdem kann der Online-Compiler das natürlich nicht verabeiten. Deshalb ist es vermutlich einfacher, [tt]makelabels.dtx[/tt] und [tt]build.lua[/tt] direkt [url=https://github.com/komascript/makelabels]aus dem github-Projekt[/url] zu holen. Da passen die Namen der Dateien dann auch zu obiger Beschreibung.