l3build Einbinden von PDFs aus generierten Sourcen in die Doku
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.