Hier eine komplexe Fragestellung:
Es geht darum, wie man die gesamte Dokumentbeschreibung, also alle zur Zeit der Dokumenterstellung benutzten Quelldateien, während der Kompilierung

  1. in das Dokumentverzeichnis herunterladen,
  2. in einer gesonderten Datei im vollen Umfang einschließen,
  3. diese Datei benennen und fest mit der ausgeführten Datei verbinden,
  4. eine Aktualisierung der Quellen bei erneuter Kompilierung verhindern,
  5. und einen archivierbaren Ausdruck der Beschreibung ermöglichen kann.

Ziel ist, für jedes Dokument eine vollständige Beschreibungsdatei zu erstellen und zu behalten, die, unabhängig von Modernisierungen und Verbesserungen der Versionen in den Repositories, den Status Quo festschreibt, damit das Dokument jederzeit durch alte Programmversionen oder durch versierte Anwender in genau dem Zustand reproduziert werden kann, in dem es geschrieben wurde.

Es ist demnach nicht gefragt, wie man die Quellen in der aktuellen Fassung, sondern in der jeweils aktuellen Fassung zur Zeit der Kompilierung mit dem ausgeführten Dokument gemeinsam abspeichern und fixieren kann. Es geht auch nicht um die Abspeicherung eines einmal erstellten Dokumentes als PDF etc. , sondern um die permanente Abspeicherung der Dokument-Beschreibungsdateien.

Natürlich kann man die nötigen Dateien herunterladen, wenn man die Quellen kennt, oder ein gesamtes System sichern. Geht das aber auch automatisiert und auf ein einzelnes Dokument bezogen, wobei ausschließlich die verwendeten Quellen einbezogen werden?

Anmerkung: Meine Frage ergibt sich aus der Archivwissenschaft, die fordert, daß ein Dokument aus seiner Beschreibung heraus mit jeder verfügbaren Technik reproduzierbar sein muß, im Kern also "plattformunabhängig" sein muß. Eine Dokumentbeschreibung muß also vollständig und archivierbar sein.

gefragt 29 Mai '14, 18:42

ctansearch's gravatar image

ctansearch
(inaktiv)
Akzeptiert: 84%

bearbeitet 01 Jun '14, 19:11

1

Wenn du alle Paketdateien speicherst, inklusive Abhängigkeiten, denn fehlen doch aber noch die Dateien für die Formaterstellung und die Quellen, um die Engine zu kompilieren. Oder liege ich da falsch.

(02 Okt '14, 07:06) Johannes
2

Es fehlen auch die Schriften und ggfs. diverse Hilfsprogramme (biber, makeindex, ... etc). Und natürlich musst du im Prinzip auch noch das Betriebssystem sichern -- es ist ja nicht gesagt, dass auf einem neuen System die Programme exakt so laufen, wie auf dem alten. Ich denke es ist illusorisch. Ich würde daher eher die .tex-Datei als das zu archivierende Dokument bezeichnen und die pdf-Datei nur als eine Art Ausdruck betrachten.

(02 Okt '14, 08:26) Ulrike Fischer

@johannes,ulrike Tatsächlich müsste es so sein, daß für einen Zeitraum jeweils das gesamte System gesichert werden müsste und jemand eine Datei aus 1999 unverändert mit dem Hintergrund von '99 kompilieren lassen kann. Dazu kämen dann Maschinen oder Emulatoren. Nur dann ist die .tex-Datei eine ausreichende Archivgrundlage. Ansonsten ist nur ein Ausdruck "archivfähig". Ein Beispiel ist die Gutenberg-Bibel. Man könnte sie nachdrucken, das wäre aber nicht das Original. Aber wie wäre es authentisch? Mit den alten Werkzeugen und dem alten Handwerk, oder mit modernen Mitteln nachgedruckt?

(03 Okt '14, 06:30) ctansearch

Soweit, sogut. Über ein Shellscript werden die Dateien, die für das Dokument benötigt werden, in das Verzeichnis kopiert. In der Ausgabe von Latex erkennt man, wenn ganze Pfade angegeben werden, daß manche abhängige, von Paketen nachgeladene Dateien noch nicht im Verzeichnis vorhanden sind. Man gibt deren Pfad dann mit \makepream[]{}{Pfad} an. Um das Verzeichnis zu vervollständigen, führt man das Shellscript \jobname.arch aus. Der Befehl \archived deaktiviert dieses Script, damit die Dateien nicht mehr aktualisiert werden. Man erhält dann einen Status Quo, in dem alle Quelldateien zum Dokument vorhanden sind. Bei neuerlicher Kompilierung werden nur die im Verzeichnis vorhandene Dateien benutzt, es findet keine Aktualisierung statt.

Open in writeLaTeX
%makepreamble.sty
%2014-06-01
\def\archived{\immediate\closeout\archfile \immediate\openout\archfile \immediate\write\archfile{file
    closed}\immediate\closeout\archfile}%ergibt ein leeres \jobname.arch,
                                %damit keine aktualisierten Dateien mehr
                                %kopiert werden.
\def\copycommand{}%muss in makepreamble.tex angegeben werden
\def\copytarget{}%muss in makepreamble.tex angegeben werden
\newwrite\archfile%
\immediate\openout\archfile=\jobname.arch%Zum Auflisten der Quelldateien,
                                %später als Shellscript verwendbar
\newwrite\preamble%
\immediate\openout\preamble=\jobname.pre%Zum Erstellen der Präamble
\def\docclass[#1]#2#3%Zum Definieren der Dokumentklasse
{%
%
\immediate\write\preamble{\unexpanded{\documentclass[#1]{#2}}}
\immediate\write\archfile{\copycommand #3 \copytarget}
}%
\def\makepream[#1]#2#3%fordert das gewünschte Paket an
{%
\def\pathA{#3}
\def\pathB{}
\immediate\write\preamble%
{%
\unexpanded{\usepackage[#1]{#2}}%
\ifx \archiv \pathB \immediate\write\archfile{\copycommand #3 \copytarget}%
\else
\ifx \pathA \pathB %
\else
\immediate\write\archfile{\copycommand #3 \copytarget}%
\fi\fi
}%
}%
\def\endpreamble%
{%
\immediate\closeout\preamble%
\input \jobname.pre%Einfügen der Präamble
%
\message{Preamble loaded (.\jobname.pre)}%
}%

%\archived Wenn aktiv, leert der Befehl die \jobname.arch, sodaß keine
%aktuellen Dateien mehr kopiert werden
\def\copytarget{}%Zielpfad eingeben,systemabhängig
\def\copycommand{}%Kopierbefehl eingeben,systemabhängig
\docclass[a4paper]{article}{/usr/share/texmf/tex/latex/base/article.cls}%Quellpfad
                                %eingeben
\makepream[]{}{/usr/share/texmf/tex/latex/base/size10.clo}
\makepream[utf8]{inputenc}{/usr/share/texmf/tex/latex/base/inputenc.sty}
\makepream[]{}{/usr/share/texmf/tex/latex/base/utf8.def}
\makepream[]{}{/usr/share/texmf/tex/latex/base/t1enc.dfu}
\makepream[]{}{/usr/share/texmf/tex/latex/base/ot1enc.dfu}
\makepream[]{}{/usr/share/texmf/tex/latex/base/omsenc.dfu}%Quellpfad
\makepream[ngerman]{babel}{/usr/share/texmf/tex/generic/babel/babel.sty}
\makepream[]{}{/usr/share/texmf/tex/generic/babel/ngermanb.ldf}
\makepream[]{}{/usr/share/texmf/tex/generic/babel/babel.def}%Quellpfad
\makepream[T1]{fontenc}{/usr/share/texmf/tex/latex/base/fontenc.sty}
\makepream[]{}{/usr/share/texmf/tex/latex/base/t1enc.def}%Quellpfad
\makepream[]{longtable}{/usr/share/texmf/tex/latex/tools/longtable.sty}%Quellpfad
\makepream[]{mbenotes}{/usr/share/texmf/tex/latex/mbenotes/mbenotes.sty}%Quellpfad
\makepream[]{graphicx}{}%Solange in der Ausgabe von Latex noch vollständige
                        %Pfade erscheinen. sind die Dateien nicht im aktuellen
                        %Verzeichnis vorhanden. Wenn man diese Pfade kopiert
                        %und als \makepream[]{}{Pfad} eingibt, werden sie in die
                        %Kopierliste eingetragen. Besonders zu beachten bei
                        %von Paketen nachgeladenen Dateien
\endpreamble
%Über die Shell werden alle nötigen Dateien in das Verzeichnis kopiert.sh<\jobname.arch
%Wenn man alle notwendigen Dateien im Verzeichnis vorfindet, aktiviert man \archive
\begin{document}
Pream
\begin{longtable}{p{1cm}}
\mbenote{Spaghetti}Noodles\\
\thembenotes[]
\end{longtable}
\end{document}
Permanenter link

beantwortet 01 Jun '14, 19:09

ctansearch's gravatar image

ctansearch
(inaktiv)

Mit texdeps kann man sehr einfach alle Dateien, die für ein LaTeX-Dokument benötigt werden, ermitteln. Es handelt sich dabei um ein perl-Script, das die benötigten Dateien zeilenweise ausgibt. Diese Liste kann man beispielsweise verwenden, um mit tar ein Archiv aller benötigten Dateien anzulegen:

tar czf project.tar.gz texdeps main.tex
Dabei ist main.tar die Hauptdatei des LaTeX-Dokuments.

Alternativ kann man auch direkt alle Dateien in ein gemeinsames Zielverzeichnis kopieren:

cp -f texdeps main.tex zielverzeichnis
Achtung: Option -f sorgt dabei dafür, dass eventuell im zielverzeichnis bereits vorhandene Dateien ohne Nachfrage überschrieben werden.

Ähnliches kann man auch mit texdepend erreichen. Auch das ist ein perl-Script.

Weitere Möglichkeiten bieten Pakete wie myfilist. Dieses arbeitet über LaTeX's \listfiles-Mechanismus, erlaubt aber die Ausgabe zu konfigurieren. Es kann auch eine Ausgabe in eine getrennte Datei konfiguriert werden. Eventuell kann man so direkt ein Skript generieren oder man wertet die so erzeugte Liste eben über ein entsprechendes Skript aus.

All diese Methoden ermitteln die verwendeten Dateien automatisch. Den Vorteil, dass man keine Datei vergisst und in der Regel keine Abhängigkeiten selbst ermitteln muss, wird durch den Nachteil erkauft, dass der Automatismus nur Dateien erfassen kann, die über bestimmte Anweisungen geladen werden. Ggf. kann man die perl-Scripte aber einfach um die Erkennung für weitere Anweisungen ergänzen. Die \listfiles-Methode ist von Haus aus bereits sehr mächtig. Dafür müssen ggf. Dateien, die nicht davon erfasst werden, getrennt behandelt werden.

Permanenter link

beantwortet 02 Jun '14, 06:51

Bes's gravatar image

Bes
1411516

bearbeitet 02 Jun '14, 07:21

Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs füge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×2

Frage gestellt: 29 Mai '14, 18:42

Frage wurde angeschaut: 2,032 Mal

Zuletzt aktualisiert: 03 Okt '14, 06:30