Wie kann ich eine Tex-Datei dynamisch importieren?
Ich habe im Wesentlichen Hunderte von .tex-Dateien in einem Ordner, alle diese Dateien haben mehrere Versionen. Ich kann sie nicht aus diesem Ordner verschieben.
Ex:
ver1file1.tex
ver2file1.tex
...
ver8file1.tex
...
ver8file100.tex
Ich möchte eine Umgebungsvariable festlegen oder ein Befehlszeilenargument übergeben können, damit Latex alle Dateien einer bestimmten Version dynamisch laden kann.
Beispiel:
pdflatex ver1
or
EXPORT LATEX_VER=ver1
um nur Folgendes in die Haupt-Latex-Datei zu importieren.
ver1file1
ver1file2
...
ver1file100
Unten sehen Sie ein Beispiel dessen, was ich bisher versucht habe, aber ich kann es nicht erreichen. Ich möchte grundsätzlich zwei .tex-Dateien haben file1.tex
und file2.tex
. Ich möchte ein Befehlszeilenargument akzeptieren können, das den Namen der zu importierenden Datei definiert.
main.tex
\import{c:\path}{aux}
\import{c:\path}{\dynavar} % should load variable from commandline + added string ex: ver1file1
aux.tex
%accept a command line argument
\ifdefined\myflag
\newcommand\dynavar[1]{\emph{#1}}
\else
\newcommand\dynavar[1]{defaultval}
\fi
\expandafter\def\expandafter\dynavar\expandafter{\dynavar { }file1}
Antwort1
Hier ist ein kleines Modell meines Vorschlags:
\documentclass{article}
\usepackage{filecontents,multido}
\begin{filecontents*}{dynavar.tex}
\makeatletter
\@ifundefined{dynavar}{%
\newcommand{\dynavar}{defaultval}%
\typeout{No command-line value specified for \string\dynavar. Using 'defaultval'.}%
}{}
\makeatother
\end{filecontents*}
% ========== You would not need this
\begin{filecontents*}{ver1file1.tex}
ver1file1
\end{filecontents*}
\begin{filecontents*}{ver1file2.tex}
ver1file2
\end{filecontents*}
% ========== You would not need this
\begin{document}
\input{dynavar}
\multido{\i=1+1}{2}{% Update '2' to (say) '100' if you have 100 files
File \texttt{\dynavar file\i}: \endgraf \input{\dynavar file\i}\endgraf}
\end{document}
Sie rufen die obige Datei auf mit
pdflatex \def\dynavar{ver1} \input{main}
ver1
um die Dateien auszuführen . Oder
pdflatex main.tex
defaultval
wenn Sie möchten, dass es aus den Dateien ausgeführt wird . \def\dynavar{ver1}
Wenn Sie die Option "Befehlszeile" verwenden, erhalten Sie die Ausgabe
Antwort2
Erwägen Sie einen Workflow mit Git. SieheHierfür weitere Informationen. Sie können jede Version taggen. Das heißt, nach einem Commit-Typ,
git tag -a "v1" -m "This version has all the bare bones necessary for the project"
Dann mehr Commits und mehr Tags, dann müssen Sie nur noch
git checkout -b v4_branch tags/v4
und Ihr Arbeitsverzeichnis wird in den Status geändert, den es hatte, als Sie zuvor „v4“ markiert haben, und Sie befinden sich in einem neuen Zweig namens v4_branch. Lesen SieHierWeitere Informationen zum korrekten Auschecken von Tags (es gibt verschiedene Vorstellungen, wie dies am besten funktioniert).
Antwort3
(habe gerade festgestellt, dass diese Lösung keine Befehlszeilen-Eingabe verwendet, wie vom Poster angegeben)
Eine andere Lösung besteht darin, eine Tex-Datei zu erstellen, die den \input
Befehl verwendet, um nur die Dateien für eine bestimmte Version einzugeben. So könnten Sie beispielsweise eine Datei mit dem Namen erstellen ver1files.tex
, die aus den folgenden Zeilen besteht:
\input{./ver1file1.tex}
\input{./ver1file2.tex}
\input{./ver1file3.tex}
...
\input{./ver1file100.tex}
Anschließend können Sie alle Ihre Dateien ganz einfach in Ihr LaTeX-Hauptdokument einfügen, ver1
indem Sie Ihre ver1files.tex
Datei wie folgt eingeben:
\input{./ver1files.tex}
Sie können eine Datei erstellen , die Befehle für alle Dateien usw. für alle Ihre Versionen ver2files.tex
enthält .\input
ver2
Beachten Sie, dass Sie in LaTeX Befehle auf diese Weise „verschachteln“ können \input
. Das heißt, Sie haben \input
in Ihrer LaTeX-Hauptdatei ein , das eine Datei eingibt, die zusätzliche \input
Befehle enthält. Mit ist das problemlos möglich \input
. Mit dem Befehl können Sie diese Art der Verschachtelung jedoch nicht nutzen \include
.
Wenn sich Ihre LaTeX-Hauptdatei nicht im selben Ordner befindet wie Ihre ver1file1.tex
usw. ver1files.tex
-Dateien, aktualisieren Sie den Pfad im \input
Befehl so, dass er auf den tatsächlichen Speicherort dieser Dateien verweist. Für das kurze Beispiel hier habe ich einfach „./“ (aktuelles Verzeichnis) verwendet.