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.

