Wie kann ich schnell zwischen .tex-Dateien wechseln, indem ich Argumente an den Dateinamen übergebe?

Wie kann ich schnell zwischen .tex-Dateien wechseln, indem ich Argumente an den Dateinamen übergebe?

Zum Beispiel

Ich habe zwei TeX-Projekte mit einer ähnlichen Dateinamenstruktur:

Bildbeschreibung hier eingeben

Die Datei master.tex hat folgende Struktur:

\input{preamble.tex} % <- \bibliography{Projekt_A_Literature} in preamble

% ...

\begin{document}

% ...

    \include{chapter/Projekt_A_cp1.tex}
    \include{chapter/Projket_A_cp2.tex}
    \include{chapter/Projekt_A_cp3.tex}

% ...

\end{document}

Der Zweck ist: Ich kann die Dateigruppe der einzugebenden Kapitel einfach und schnell ändern.

\include{chpater/Project_A_cp1.tex}        \include{chpater/Project_B_cp1.tex}
\include{chpater/Project_A_cp2.tex}  ==>   \include{chpater/Project_B_cp2.tex} 
\include{chapter/Project_A_cp3.tex}        \include{chpater/Project_B_cp3.tex}

Ein einfacher, aber nicht eleganter Ansatz ist:

\newcommand{\prjindex}{A} $ or \def\prjindex{A}
%...
\begin{document}
  \include{chpater/Project_\prjindex_cp1.tex}
  \include{chpater/Project_\prjindex_cp2.tex}
  \include{chpater/Project_\prjindex_cp3.tex}    
\end{document}

die Frage dieser Lösung ist, wenn ich nicht in der Master-TeX-Datei kompiliere, gibt es Fehler wie

Undefinierte Steuersequenz ....{Project_\prjindex_Literature.tex}.

Also bin ich hierher gekommen, um eine elegantere Lösung zu finden

Antwort1

Sie scheinen einen „Mechanismus“ zur automatischen Erkennung in Situationen zu benötigen , in denen keine „manuelle“ \prjindexDefinition bereitgestellt wird.\prjindex


Vorbemerkungen:

NormalerweiseDie Erweiterung des Grundelements \jobnamebildet den Namen der Datei (ohne Erweiterung), die zum Starten der Kompilierung verwendet wurde.

Wenn Sie beispielsweise ein Projekt kompilieren, dessen Hauptdatei testfile.texüber die Befehlszeile aufgerufen wird
latex testfile.tex
, wird das Primitiv \jobnamezu der Phrase erweitert testfile.
Zeichen-Token in Phrasen, die von bereitgestellt werden, \jobnamehaben immer den Kategoriecode 12 (andere), während Leerzeichen immer den Kategoriecode 10 (Leerzeichen) haben.

Der Ausdruck testfile, der aus der Erweiterung kommt, \jobnamewird verwendet für

  • Erstellen der .log-Datei: Die .log-Datei erhält den Namen testfile.log.
  • Erstellen der Haupt-AUX-Datei: Diese erhält den Namen testfile.aux.
  • Erstellen der .toc-Datei mit den Daten für das Inhaltsverzeichnis: Diese erhält den Namen testfile.toc.
  • Erstellen der .lof-Datei mit den Daten für das Abbildungsverzeichnis: Diese erhält den Namen testfile.lof.
  • Erstellen der .lot-Datei mit den Daten für die Tabellenliste: Diese erhält den Namen testfile.lot.
  • usw.

Aber mit den meisten heutigen TeX-Distributionen können Sie (La)TeXvon der üblichen Art und Weise, Dinge zu handhaben, abweichen:

Bei den meisten heutigen TeX-Distributionen können Sie in der Befehlszeile eine Befehlszeilenoption (die ‑‑jobname-Option) angeben, mit der Sie ändern können, welche Phrase \jobnameausgegeben wird.

Wenn Sie beispielsweise ein Projekt kompilieren, dessen Hauptdatei testfile.texüber die Befehlszeile aufgerufen wird
latex --jobname=foobar testfile.tex
, wird das Grundelement \jobnamezu der Phrase erweitert foobar.

In diesem Fall wird der Ausdruck foobar, der aus der Erweiterung stammt, verwendet für\jobname

  • Erstellen der .log-Datei: Die .log-Datei erhält den Namen foobar.log.
  • Erstellen der Haupt-AUX-Datei: Diese erhält den Namen foobar.aux.
  • Erstellen der .toc-Datei mit den Daten für das Inhaltsverzeichnis: Diese erhält den Namen foobar.toc.
  • Erstellen der .lof-Datei mit den Daten für das Abbildungsverzeichnis: Diese erhält den Namen foobar.lof.
  • Erstellen der .lot-Datei mit den Daten für die Tabellenliste: Diese erhält den Namen foobar.lot.
  • usw.

Bei meinem Vorschlag unten ist es Voraussetzung, dass LaTeX die Dinge handhabtimnormaler Weg, d. h., die Dinge müssen zusammengestellt werdenohneBereitstellung einiger‑‑jobname-Möglichkeit.

Daher ist mein folgender Vorschlag nicht für Personen geeignet, die solche (Online-)LaTeX-Plattformen/TeX-Editoren/Benutzeroberflächen verwenden, bei denen die Dinge unter der Haube so konfiguriert sind, dass die ‑‑jobname-Option verwendet wird.


Falls

  1. die Namen aller Dateien, bei deren Kompilierung die Definition von \prjindex„automatisch erkannt“ werden soll (da sie nicht „von Hand“ definiert wird), dem Muster entsprechen — sie bezeichnen das Projekt, sind nicht leer und enthalten keine Unterstriche ( ) —Projekt_⟨#1⟩_⟨#2⟩.tex⟨#1⟩_
, Und

  1. Aufruf von Latex zum "Standalone-Kompilieren" von Dateien, bei deren Kompilierung die Definition von \prjindex"automatisch erkannt" immer erfolgtohneAufrufen der ‑‑jobname-Option (was bedeutet, dass die Erweiterung des \jobname-Primitivs den Namen der Datei (ohne Erweiterung) bildet, die zum Einleiten der Kompilierung verwendet wurde)
kann ich ein Makro anbieten \GetPrjindexFromJobnameIfUndefined, das wie folgt funktioniert:

Falls das Makro \prjindexbereits definiert ist, tut es nichts.

Falls das Makro \prjindexnicht definiert ist, prüft es, ob die Expansion des \jobname-Primitivs dem Muster entspricht . Wenn sie nicht diesem Muster entspricht, wird eine Fehlermeldung ausgelöst. Wenn sie diesem Muster entspricht, wird geprüft, ob leer ist. Wenn dies der Fall ist, wird eine Fehlermeldung ausgelöst. Wenn dies nicht der Fall ist, wird das Makro so definiert, dass es nach expandiert .Projekt_⟨#1⟩_⟨#2⟩⟨#1⟩\prjindex⟨#1⟩

Ob diese Routine für Dich von Nutzen ist, kann ich nicht beurteilen, da Du nicht allzu detailliert dargelegt hast, wie der Teil der Dateistruktur Deines Projektes organisiert ist, der das Kompilieren der einzelnen Dateien sowohl "standalone" als auch beim Aufruf aus einer Master-Tex-Datei über oder ermöglicht .Projekt_⟨#1⟩_⟨#2⟩.tex\input\include

Falls alle Projektdateien irgendwie dieselbe Präambel teilen, können Sie diese Routine wahrscheinlich über diese Präambel allen Projektdateien verfügbar machen.

Wahrscheinlich können Sie diese Routine (und den Aufruf derselben) in Ihre Routine einbinden. preamble.tex.Diese Routine tut nichts, falls \prjindexsie bereits definiert ist.
Daher

  • innerhalb master.texkönnen Sie definieren\prjindex VorEingabe preamble.tex.
  • Das Szenario der eigenständigen Kompilierung einer Ihrer -Dateien führt zur Eingabe von while ist noch nicht definiert, was wiederum dazu führt, dass die Routine es „automatisch erkennt“ und für Sie definiert, indem sie das Ergebnis der Erweiterung von untersucht .Projekt_⟨#1⟩_⟨#2⟩.tex\preamble.tex\prjindex\GetPrjindexFromJobnameIfUndefined\prjindex\jobname

\documentclass{article}

%%========Code for \GetPrjindexFromJobnameIfUndefined=========
\begingroup
\makeatletter
\def\prjprephrase{Projekt_}%
\def\prjpostphrase{_}%
% \jobname delivers everything but the space (which will be of catcode 10) 
% with catcode 12(other). Therefore "sanitizing" is needed for turning
% everything but the space into catcode 12(other):
\@onelevel@sanitize\prjprephrase
\@onelevel@sanitize\prjpostphrase
\newcommand\GetPrjindexFromJobnameIfUndefined[2]{%
  \endgroup
  \newcommand\GetPrjindexFromJobnameIfUndefined{%
    \@ifundefined{prjindex}{%
      \expandafter\GetPrjindexCheckPattern\jobname$#1#2$&%
    }{}%
  }%
  \@ifdefinable\GetPrjindexCheckPattern{%
    \def\GetPrjindexCheckPattern##1#1##2#2##3$##4&{%
      \GetPrjindexPatternfork
      &##4&{\expandafter\GetPrjindexExtractfrompattern\jobname$}%
      &#1#2$&{%
        \GenericError{(\string\prjindex)\space}{%
          Error on input line \the \inputlineno:\MessageBreak
          \string\GetPrjindexFromJobnameIfUndefined\space cannot extract the\MessageBreak
          \string\prjindex\space from \string\jobname's expansion.\MessageBreak
          (\string\GetPrjindexFromJobnameIfUndefined\space is defined\MessageBreak
           \space somewhere in this document.)\@gobble
        }{Have a look at the comments in this document.}%
        {%
          \string\GetPrjindexFromJobnameIfUndefined\space can extract the \string\prjindex\MessageBreak
          from \string\jobname's expansion only in case \string\jobname's expansion is\MessageBreak
          of pattern\MessageBreak
          \@spaces #1\string####1#2\string####2\MessageBreak
          while \string####1 is not empty.\MessageBreak
          If this is the case, the expansion of \string\prjindex\space will be \string####1.\MessageBreak
          \string####1 will not contain underscores (\string_).\MessageBreak
          \string####2 can contain underscores.\MessageBreak
        }%
      }%
      &&&&%
    }%
  }%
  \@ifdefinable\GetPrjindexPatternfork{%
    \def\GetPrjindexPatternfork##1&#1#2$&##2##3&&&&{##2}%
  }%
  \@ifdefinable\GetPrjindexExtractfrompattern{%
    \def\GetPrjindexExtractfrompattern#1##1#2##2${%
      \ifx\relax##1\relax
        \expandafter\@firstoftwo
      \else
        \expandafter\@secondoftwo
      \fi
      {%
        \GenericError{(\string\prjindex)\space}{%
          Error on input line \the \inputlineno:\MessageBreak
          \string\prjindex\space is empty.\MessageBreak
          (\string\GetPrjindexFromJobnameIfUndefined\space is defined\MessageBreak
           \space somewhere in this document.)\@gobble
        }{Have a look at the comments in this document.}%
        {%
          \string\GetPrjindexFromJobnameIfUndefined\space can extract the \string\prjindex\MessageBreak
          from \string\jobname's expansion only in case \string\jobname's expansion is\MessageBreak
          of pattern\MessageBreak
          \@spaces #1\string####1#2\string####2\MessageBreak
          while \string####1 is not empty.\MessageBreak
          If this is the case, the expansion of \string\prjindex\space will be \string####1.\MessageBreak
          \string####1 will not contain underscores (\string_).\MessageBreak
          \string####2 can contain underscores.\MessageBreak
        }%
      }%
      {\newcommand*\prjindex{##1}}%
    }%
  }%
}%
\expandafter\expandafter\expandafter\GetPrjindexFromJobnameIfUndefined
\expandafter\expandafter\expandafter{\expandafter\prjprephrase\expandafter}%
\expandafter{\prjpostphrase}%
%%=====End of code for \GetPrjindexFromJobnameIfUndefined=====

\GetPrjindexFromJobnameIfUndefined

\show\prjindex

\begin{document}
Some document
\end{document}

Übrigens: Zum Testen der Routine habe ich das obige Beispiel unter gespeichert test.texund kompiliert, wobei ich die ‑‑jobname-Option mit verschiedenen Werten aufgerufen habe.

Das Kompilieren über den Befehl latex test.texergab wie erwartet:

! Error on input line 80:
(\prjindex) \GetPrjindexFromJobnameIfUndefined cannot extract the
(\prjindex) \prjindex from \jobname's expansion.
(\prjindex) (\GetPrjindexFromJobnameIfUndefined is defined
(\prjindex)  somewhere in this document.)

Have a look at the comments in this document.
Type  H <return>  for immediate help.
 ...                                              

l.80 \GetPrjindexFromJobnameIfUndefined

? 
> \prjindex=undefined.
l.82 \show\prjindex

Dies war zu erwarten, da in diesem Fall \jobnameeine Erweiterung erfolgte test, die nicht dem Muster entspricht .
Projekt_⟨#1⟩_⟨#2⟩

Das Kompilieren über den Befehl latex ‑‑jobname=Projekt_A_4  test.texergab wie erwartet:

\prjindex=macro:
->A.
l.82 \show\prjindex

(Sie würden dasselbe erhalten, wenn das Beispiel Projekt_A_4.texunter dem Befehl gespeichert und kompiliert würde latex Projekt_A_4.tex.)

Das Kompilieren über den Befehl latex ‑‑jobname=Projekt_B_4 test.texergab wie erwartet:

\prjindex=macro:
->B.
l.82 \show\prjindex

(Sie würden dasselbe erhalten, wenn das Beispiel Projekt_B_4.texunter dem Befehl gespeichert und kompiliert würde latex Projekt_B_4.tex.)

Das Kompilieren über den Befehl latex ‑‑jobname=Projekt_JohannGambolputty_12345 test.texergab wie erwartet:

\prjindex=macro:
->JohannGambolputty.
l.82 \show\prjindex

(Sie würden dasselbe erhalten, wenn das Beispiel Projekt_JohannGambolputty_12345.texunter dem Befehl gespeichert und kompiliert würde latex Projekt_JohannGambolputty_12345.tex.)

Übrigens:

Manchmal organisiere ich meine Projektdateien wie folgt:

Präambel.tex

% Check whether the \documentclass-command was already invoked.
% If so, increment \inputlevel and stop inputting.
% If not so, don't stop imputting and thus do all the
% preamble-stuff, inclusive defining \inputlevel:
\expandafter\ifx\csname @twoclasseserror\endcsname\documentclass
  \xdef\inputlevel{\number\numexpr\inputlevel+1\relax}%
  \expandafter\endinput
\fi
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
\documentclass{article}%
% 
\newcommand*\inputlevel{1}%
\global\let\inputlevel=\inputlevel
%
% Whatsoever preamble-commands, etc.
%
% Here you can also place the code for defining \GetPrjindexFromJobnameIfUndefined
% and then invoke it for defining \prjindex:
%
%%========Code for \GetPrjindexFromJobnameIfUndefined=========
\begingroup
\makeatletter
\def\prjprephrase{Projekt_}%
\def\prjpostphrase{_}%
% \jobname delivers everything but the space (which will be of catcode 10) 
% with catcode 12(other). Therefore "sanitizing" is needed for turning
% everything but the space into catcode 12(other):
\@onelevel@sanitize\prjprephrase
\@onelevel@sanitize\prjpostphrase
\newcommand\GetPrjindexFromJobnameIfUndefined[2]{%
  \endgroup
  \newcommand\GetPrjindexFromJobnameIfUndefined{%
    \@ifundefined{prjindex}{%
      \expandafter\GetPrjindexCheckPattern\jobname$#1#2$&%
    }{}%
  }%
  \@ifdefinable\GetPrjindexCheckPattern{%
    \def\GetPrjindexCheckPattern##1#1##2#2##3$##4&{%
      \GetPrjindexPatternfork
      &##4&{\expandafter\GetPrjindexExtractfrompattern\jobname$}%
      &#1#2$&{%
        \GenericError{(\string\prjindex)\space}{%
          Error on input line \the \inputlineno:\MessageBreak
          \string\GetPrjindexFromJobnameIfUndefined\space cannot extract the\MessageBreak
          \string\prjindex\space from \string\jobname's expansion.\MessageBreak
          (\string\GetPrjindexFromJobnameIfUndefined\space is defined\MessageBreak
           \space somewhere in this document.)\@gobble
        }{Have a look at the comments in this document.}%
        {%
          \string\GetPrjindexFromJobnameIfUndefined\space can extract the \string\prjindex\MessageBreak
          from \string\jobname's expansion only in case \string\jobname's expansion is\MessageBreak
          of pattern\MessageBreak
          \@spaces #1\string####1#2\string####2\MessageBreak
          while \string####1 is not empty.\MessageBreak
          If this is the case, the expansion of \string\prjindex\space will be \string####1.\MessageBreak
          \string####1 will not contain underscores (\string_).\MessageBreak
          \string####2 can contain underscores.\MessageBreak
        }%
      }%
      &&&&%
    }%
  }%
  \@ifdefinable\GetPrjindexPatternfork{%
    \def\GetPrjindexPatternfork##1&#1#2$&##2##3&&&&{##2}%
  }%
  \@ifdefinable\GetPrjindexExtractfrompattern{%
    \def\GetPrjindexExtractfrompattern#1##1#2##2${%
      \ifx\relax##1\relax
        \expandafter\@firstoftwo
      \else
        \expandafter\@secondoftwo
      \fi
      {%
        \GenericError{(\string\prjindex)\space}{%
          Error on input line \the \inputlineno:\MessageBreak
          \string\prjindex\space is empty.\MessageBreak
          (\string\GetPrjindexFromJobnameIfUndefined\space is defined\MessageBreak
           \space somewhere in this document.)\@gobble
        }{Have a look at the comments in this document.}%
        {%
          \string\GetPrjindexFromJobnameIfUndefined\space can extract the \string\prjindex\MessageBreak
          from \string\jobname's expansion only in case \string\jobname's expansion is\MessageBreak
          of pattern\MessageBreak
          \@spaces #1\string####1#2\string####2\MessageBreak
          while \string####1 is not empty.\MessageBreak
          If this is the case, the expansion of \string\prjindex\space will be \string####1.\MessageBreak
          \string####1 will not contain underscores (\string_).\MessageBreak
          \string####2 can contain underscores.\MessageBreak
        }%
      }%
      {\newcommand*\prjindex{##1}}%
    }%
  }%
}%
\expandafter\expandafter\expandafter\GetPrjindexFromJobnameIfUndefined
\expandafter\expandafter\expandafter{\expandafter\prjprephrase\expandafter}%
\expandafter{\prjpostphrase}%
%%=====End of code for \GetPrjindexFromJobnameIfUndefined=====
% 
% This will define \prjindex depending on the expansion of \jobname
% while \jobname usually represents the name of the file used for
% initiating compilation:
%
% !!! I don't know whether, e.g., online-latex-plattforms like overleaf
% !!! invoke latex using the -jobname-option, which would lead to
% !!! the expansion of \jobname deviating from the name of the file
% !!! used for initiating compilation.
%
\GetPrjindexFromJobnameIfUndefined
%
% With subsequent preamble-commands you can, if you wish, fork depending on
% the expansion of \prjindex. But be aware that like \jobname \prjindex also
% holds only characters of catcode 12(other) and spaces of catcode 10(space).
% Therefore when storing a string in a temporary macro (this should, like
% \prjindex not be defined in terms of \long, which is the case with
% \def or \newcommand*) and \ifx-comparing that temporary macro to \prjindex,
% make sure that the definition of that temporary macro is "sanitized" by
% means of \@onelevel@sanitize before doing the \ifx-comparison.
%
%  \usepackage...
%  \usepackage...
%
\begin{document}%
\endinput
|
| Place whatsoever comments remarks and explanations and manuals you wish to place 
| here. They won't be processed because LaTeX ceases reading and processing this
| file when encountering \endinput.

Postamble.tex

\csname @\ifnum\inputlevel>1 second\else first\fi oftwo\endcsname
{%
  \end{document}%
}{%
  \xdef\inputlevel{\number\numexpr\inputlevel-1\relax}%
}%

Projekt_A_cp1.tex

%----------------------
\input{Preamble.tex}%
%----------------------
This is file \texttt{Projekt\string_A\string_cp1.tex}\par
This is the text in file \texttt{Projekt\string_\prjindex\string_cp1.tex}.\par
The file \texttt{Projekt\string_\prjindex\string_cp1.tex} invokes the file \texttt{Projekt\string_\prjindex\string_cp2.tex}:\par
\input{Projekt_\prjindex_cp2.tex}%
%----------------------
\input{Postamble.tex}%
%----------------------

Projekt_A_cp2.tex

%----------------------
\input{Preamble.tex}%
%----------------------
This is file \texttt{Projekt\string_A\string_cp2.tex}\par
This is the text in file \texttt{Projekt\string_\prjindex\string_cp2.tex}.\par
The file \texttt{Projekt\string_\prjindex\string_cp2.tex} invokes the file \texttt{Projekt\string_\prjindex\string_cp3.tex}:\par
\input{Projekt_\prjindex_cp3.tex}%
%----------------------
\input{Postamble.tex}%
%----------------------

Projekt_A_cp3.tex

%----------------------
\input{Preamble.tex}%
%----------------------
This is file \texttt{Projekt\string_A\string_cp3.tex}\par
This is the text in file \texttt{Projekt\string_\prjindex\string_cp3.tex}.\par
%----------------------
\input{Postamble.tex}%
%----------------------

Projekt_B_cp1.tex

%----------------------
\input{Preamble.tex}%
%----------------------
This is file \texttt{Projekt\string_B\string_cp1.tex}\par
This is the text in file \texttt{Projekt\string_\prjindex\string_cp1.tex}.\par
The file \texttt{Projekt\string_\prjindex\string_cp1.tex} invokes the file \texttt{Projekt\string_\prjindex\string_cp2.tex}:\par
\input{Projekt_\prjindex_cp2.tex}%
%----------------------
\input{Postamble.tex}%
%----------------------

Projekt_B_cp2.tex

%----------------------
\input{Preamble.tex}%
%----------------------
This is file \texttt{Projekt\string_B\string_cp2.tex}\par
This is the text in file \texttt{Projekt\string_\prjindex\string_cp2.tex}.\par
The file \texttt{Projekt\string_\prjindex\string_cp2.tex} invokes the file \texttt{Projekt\string_\prjindex\string_cp3.tex}:\par
\input{Projekt_\prjindex_cp3.tex}%
%----------------------
\input{Postamble.tex}%
%----------------------

Projekt_B_cp3.tex

%----------------------
\input{Preamble.tex}%
%----------------------
This is file \texttt{Projekt\string_B\string_cp3.tex}\par
This is the text in file \texttt{Projekt\string_\prjindex\string_cp3.tex}.\par
%----------------------
\input{Postamble.tex}%
%----------------------

Auf diese Weise kann jede der Dateien Projekt_A_cp1.tex, Projekt_A_cp2.tex, Projekt_A_cp3.tex bzw. jede der Dateien Projekt_B_cp1.tex, Projekt_B_cp2.tex, sowohl zum „Standalone“-Kompilieren verwendet werden als auch über oder durch eine andere Datei desselben Projekts Projekt_B_cp3.tex aufgerufen werden .\input\include

Preamble.texkann Code enthalten, bei dem je nach Bedeutung von eine Verzweigung stattfindet \prjindex, so dass die Dinge innerhalb derselben Präambeldatei für unterschiedliche Projekte unterschiedlich gehandhabt werden können.

Antwort2

Ich bin nicht sicher, wo das Problem liegt, aber Sie müssen auf jeden Fall eine Änderung an Ihrem Code vornehmen: Das Argument für \includemussnichthabe die .texErweiterung.

\documentclass{book}

% why shouldn't this be elegant
\newcommand{\projectindex}{B}

\begin{document}

\include{chapter/Project_\projectindex_cp1}
\include{chapter/Project_\projectindex_cp2}
\include{chapter/Project_\projectindex_cp3}

\end{document}

Hier ist die Terminalausgabe beim Kompilieren dieses Codes

pdflatex sun
This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019) (preloaded format=pdflatex)
 restricted \write18 enabled.
entering extended mode
(./sun.tex
LaTeX2e <2019-10-01> patch level 3
(/usr/local/texlive/2019/texmf-dist/tex/latex/base/book.cls
Document Class: book 2019/10/25 v1.4k Standard LaTeX document class
(/usr/local/texlive/2019/texmf-dist/tex/latex/base/bk10.clo)) (./sun.aux
(./chapter/Project_B_cp1.aux) (./chapter/Project_B_cp2.aux)
(./chapter/Project_B_cp3.aux)) (./chapter/Project_B_cp1.tex
Chapter 1.
) [1{/usr/local/texlive/2019/texmf-var/fonts/map/pdftex/updmap/pdftex.map}]
(./chapter/Project_B_cp2.tex [2]
Chapter 2.
) [3] (./chapter/Project_B_cp3.tex [4]
Chapter 3.
) [5] (./sun.aux (./chapter/Project_B_cp1.aux) (./chapter/Project_B_cp2.aux)
(./chapter/Project_B_cp3.aux)) )</usr/local/texlive/2019/texmf-dist/fonts/type1
/public/amsfonts/cm/cmbx12.pfb></usr/local/texlive/2019/texmf-dist/fonts/type1/
public/amsfonts/cm/cmr10.pfb></usr/local/texlive/2019/texmf-dist/fonts/type1/pu
blic/amsfonts/cm/cmsl10.pfb>
Output written on sun.pdf (5 pages, 30009 bytes).

Wenn ich zu ändere \newcommand{\projectindex}{A}, erhalte ich nach zwei LaTeX-Durchläufen

pdflatex sun
This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019) (preloaded format=pdflatex)
 restricted \write18 enabled.
entering extended mode
(./sun.tex
LaTeX2e <2019-10-01> patch level 3
(/usr/local/texlive/2019/texmf-dist/tex/latex/base/book.cls
Document Class: book 2019/10/25 v1.4k Standard LaTeX document class
(/usr/local/texlive/2019/texmf-dist/tex/latex/base/bk10.clo)) (./sun.aux
(./chapter/Project_A_cp1.aux) (./chapter/Project_A_cp2.aux)
(./chapter/Project_A_cp3.aux)) (./chapter/Project_A_cp1.tex
Chapter 1.
) [1{/usr/local/texlive/2019/texmf-var/fonts/map/pdftex/updmap/pdftex.map}]
(./chapter/Project_A_cp2.tex [2]
Chapter 2.
) [3] (./chapter/Project_A_cp3.tex [4]
Chapter 3.
) [5] (./sun.aux (./chapter/Project_A_cp1.aux) (./chapter/Project_A_cp2.aux)
(./chapter/Project_A_cp3.aux)) )</usr/local/texlive/2019/texmf-dist/fonts/type1
/public/amsfonts/cm/cmbx12.pfb></usr/local/texlive/2019/texmf-dist/fonts/type1/
public/amsfonts/cm/cmr10.pfb></usr/local/texlive/2019/texmf-dist/fonts/type1/pu
blic/amsfonts/cm/cmsl10.pfb>
Output written on sun.pdf (5 pages, 29893 bytes).
Transcript written on sun.log.

Wie Sie sehen, sind die erwarteten Dateien enthalten.

verwandte Informationen