l3build Einbinden von PDFs aus generierten Sourcen in die Doku

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: l3build Einbinden von PDFs aus generierten Sourcen in die Doku

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

von KOMA » Fr 13. Aug 2021, 18:56

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. ;-)

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

von u_fischer » Fr 13. Aug 2021, 13:04

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).

l3build Einbinden von PDFs aus generierten Sourcen in die Doku

von KOMA » Fr 13. Aug 2021, 09:19

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.


Nach oben