l3build Einbinden von PDFs aus generierten Sourcen in die Doku Thema ist als GELÖST markiert

Fragen und Probleme, die nicht den obigen Kategorien zugeordnet werden können


Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2958
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

l3build Einbinden von PDFs aus generierten Sourcen in die Doku

Beitrag von KOMA »

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.


Benutzeravatar
u_fischer
Forum-Meister
Forum-Meister
Beiträge: 4266
Registriert: Do 22. Nov 2012, 11:09
Kontaktdaten:

Re: l3build Einbinden von PDFs aus generierten Sourcen in die Doku

Beitrag von u_fischer »

Joseph schlägt das hier vor (ungetestet, aber ich traue ihm ...)

sourcefiles = { "makelabels.dtx" }
unpackfiles = sourcefiles

function typeset_demo_tasks()
  cp("*.tex",unpackdir,typesetdir)
  tex("makelabels-example.tex",typesetdir)
  tex("makelabels-envlab-example.tex",typesetdir)
  return 0
end

Er sagt, dass derzeit l3build davon ausgeht, dass demo-Dateien außerhalb der source-Dateien liegen.

Oder einfacher

sourcefiles = { "makelabels.dtx" }
unpackfiles = sourcefiles

typesetdemofiles = {"makelabels-example.tex", "makelabels-envlab-example.tex"}

function typeset_demo_tasks()
  cp("*.tex",unpackdir,typesetdir)
  return 0
end

(Aber da er jetzt mit Marcel diskutiert, ist das wahrscheinlich nicht das Ende).


Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2958
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Re: l3build Einbinden von PDFs aus generierten Sourcen in die Doku

Beitrag von KOMA »

Danke.

Solange ich keine anderen generierten *.tex-Dateien habe, habe ich mich einmal für die zweite Variante entschieden.

Falls die beiden auf eine noch bessere Idee kommen, bin ich natürlich immer interessiert. ;-)


Antworten