importiert dynamisch tex-Dateien

importiert dynamisch tex-Dateien

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.texund 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}

ver1um die Dateien auszuführen . Oder

pdflatex main.tex

defaultvalwenn Sie möchten, dass es aus den Dateien ausgeführt wird . \def\dynavar{ver1}Wenn Sie die Option "Befehlszeile" verwenden, erhalten Sie die Ausgabe

Bildbeschreibung hier eingeben

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 \inputBefehl 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, ver1indem Sie Ihre ver1files.texDatei 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.texenthält .\inputver2

Beachten Sie, dass Sie in LaTeX Befehle auf diese Weise „verschachteln“ können \input. Das heißt, Sie haben \inputin Ihrer LaTeX-Hauptdatei ein , das eine Datei eingibt, die zusätzliche \inputBefehle 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.texusw. ver1files.tex-Dateien, aktualisieren Sie den Pfad im \inputBefehl so, dass er auf den tatsächlichen Speicherort dieser Dateien verweist. Für das kurze Beispiel hier habe ich einfach „./“ (aktuelles Verzeichnis) verwendet.

verwandte Informationen