Как быстро переключить .tex-файл, передав аргументы в filename?

Как быстро переключить .tex-файл, передав аргументы в filename?

Например

У меня есть два проекта TeX с похожей структурой имен файлов:

введите описание изображения здесь

Master.tex имеет следующую структуру:

\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}

цель такова: я могу легко и быстро изменить группу файлов глав для ввода.

\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}

простой, но не элегантный подход:

\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}

вопрос этого решения в том, что если я компилирую не в главном TeX-файле, то выдает ошибки типа

Неопределенная последовательность управления ....{Project_\prjindex_Literature.tex}.

Поэтому я пришел сюда за более элегантным решением.

решение1

Похоже, вам нужен «механизм» для автоматического определения \prjindexв ситуациях, когда определение \prjindexне дано «вручную».


Предварительные замечания:

Обычнорасширение примитива \jobnameформирует имя того файла (без расширения), который был использован для инициирования компиляции.

Например, если вы компилируете проект, основной файл которого находится testfile.texчерез командную строку
latex testfile.tex
, примитив \jobnameбудет расширен до фразы testfile.
Символьные токены во фразах, доставленных с помощью , \jobnameвсегда будут иметь код категории 12 (другое), а пробелы всегда будут иметь код категории 10 (пробел).

Фраза testfile, которая происходит от расширения, \jobnameбудет использоваться для

  • создание .log-файла: .log-файл будет иметь имя testfile.log.
  • создание основного .aux-файла: Он будет называться testfile.aux.
  • создание .toc-файла, содержащего данные для оглавления: Он будет называться testfile.toc.
  • создание .lof-файла, содержащего данные для списка фигур: Он будет называться testfile.lof.
  • создание .lot-файла, содержащего данные для списка таблиц: Он будет называться testfile.lot.
  • и т. д.

Но в большинстве современных дистрибутивов TeX вы можете использовать (La)TeXотклоняться от обычного способа решения проблем:

В большинстве современных дистрибутивов TeX вы можете указать в командной строке параметр командной строки (-option ), который позволяет вам изменить выводимую ‑‑jobnameфразу .\jobname

Например, если вы компилируете проект, основной файл которого находится testfile.texчерез командную строку
latex --jobname=foobar testfile.tex
, примитив \jobnameбудет расширен до фразы foobar.

В этом случае фраза foobar, которая происходит от расширения, \jobnameбудет использоваться для

  • создание .log-файла: .log-файл будет иметь имя foobar.log.
  • создание основного .aux-файла: Он будет называться foobar.aux.
  • создание .toc-файла, содержащего данные для оглавления: Он будет называться foobar.toc.
  • создание .lof-файла, содержащего данные для списка фигур: Он будет называться foobar.lof.
  • создание .lot-файла, содержащего данные для списка таблиц: Он будет называться foobar.lot.
  • и т. д.

С моим предложением ниже, LaTeX должен обрабатывать вещивобычный способ, т.е. вещи должны быть скомпилированыбезпредоставляя некоторые‑‑jobname-вариант.

Поэтому мое предложение ниже не подойдет тем, кто использует такие (онлайн-)платформы LaTeX/редакторы TeX/пользовательские интерфейсы, где под капотом все настроено на использование опции ‑‑jobname.


В случае

  1. имена всех тех файлов, во время компиляции которых определение \prjindexдолжно быть «определено автоматически» (так как оно не будет определено «вручную»), имеют шаблон — оба обозначают проект, не являются пустыми и не содержат подчеркиваний ( ) —Projekt_⟨#1⟩_⟨#2⟩.tex⟨#1⟩_
, и

  1. вызов latex для «автономной компиляции» файлов, во время компиляции которых всегда происходит определение \prjindex«автоопределения»безвызов ‑‑jobnameопции -option (подразумевающей, что расширение опции \jobname-primitive формирует имя того файла (без расширения), который использовался для начала компиляции)
, могу предложить макрос \GetPrjindexFromJobnameIfUndefined, который действует следующим образом:

Если макрос \prjindexуже определен, он ничего не делает.

В случае, если макрос \prjindexне определен, он проверяет, имеет ли расширение -primitive \jobnameшаблон . Если это не тот шаблон, будет выдано сообщение об ошибке. Если это тот шаблон, будет проверено, будет ли он пустым. Если это так, будет выдано сообщение об ошибке. Если это не так, макрос будет определен для расширения в .Projekt_⟨#1⟩_⟨#2⟩⟨#1⟩\prjindex⟨#1⟩

Я не могу решить, полезна ли вам эта процедура, поскольку вы не раскрыли слишком подробно, как организована та часть файловой структуры вашего проекта, которая позволяет компилировать отдельные файлы как «автономно», так и при вызове из главного tex-файла через или .Projekt_⟨#1⟩_⟨#2⟩.tex\input\include

В случае, если все файлы проектов каким-то образом имеют одинаковую преамбулу, вы, вероятно, можете сделать эту процедуру доступной для всех файлов проектов через эту преамбулу.

Вероятно, вы можете включить эту процедуру (и вызов к ней) в свой preamble.tex.Эта процедура ничего не делает в случае, если \prjindexуже определена.
Поэтому

  • внутри master.texвы можете определить\prjindex доввод preamble.tex.
  • сценарий автономной компиляции одного из ваших -файлов приводит к вводу while is not yet defined, что в свою очередь приводит к процедуре «автоматического обнаружения» и определения для вас путем проверки результата расширения .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}

Кстати: для тестирования процедуры я сохранил пример выше test.texи скомпилировал его, вызвав ‑‑jobnameопцию - с разными значениями.

Компиляция с помощью команды latex test.texдала ожидаемый результат:

! 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

Это было ожидаемо, поскольку в данном случае \jobnameрасширение testне соответствует шаблону .
Projekt_⟨#1⟩_⟨#2⟩

Компиляция с помощью команды latex ‑‑jobname=Projekt_A_4  test.texдала ожидаемый результат:

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

(Вы получите то же самое, если сохраните пример как Projekt_A_4.texи скомпилируйте его с помощью команды latex Projekt_A_4.tex.)

Компиляция с помощью команды latex ‑‑jobname=Projekt_B_4 test.texдала ожидаемый результат:

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

(Вы получите то же самое, если сохраните пример как Projekt_B_4.texи скомпилируйте его с помощью команды latex Projekt_B_4.tex.)

Компиляция с помощью команды latex ‑‑jobname=Projekt_JohannGambolputty_12345 test.texдала ожидаемый результат:

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

(Вы получите то же самое, если сохраните пример как Projekt_JohannGambolputty_12345.texи скомпилируйте его с помощью команды latex Projekt_JohannGambolputty_12345.tex.)

Кстати:

Иногда я организую файлы своих проектов следующим образом:

Преамбула.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.

Постамбула.tex

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

Проект_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}%
%----------------------

Проект_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}%
%----------------------

Проект_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}%
%----------------------

Проект_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}%
%----------------------

Проект_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}%
%----------------------

Проект_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}%
%----------------------

Таким образом, каждый из файлов Projekt_A_cp1.tex, Projekt_A_cp2.tex, Projekt_A_cp3.tex соответственно, каждый из файлов Projekt_B_cp1.tex, Projekt_B_cp2.tex, Projekt_B_cp3.tex может использоваться как для компиляции «отдельно», так и для вызова через \inputили посредством \includeдругого файла того же проекта.

Preamble.texможет содержать код, в котором происходит разветвление в зависимости от значения \prjindex, поэтому для разных проектов в одном и том же файле преамбулы все может обрабатываться по-разному.

решение2

Я не уверен, в чем проблема, но вам наверняка нужно внести изменения в свой код: аргумент \includeдолженнетимеют .texрасширение .

\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}

Вот вывод терминала при компиляции этого кода

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

Если я изменю на \newcommand{\projectindex}{A}, то после двух запусков LaTeX я получу

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.

Как видите, ожидаемые файлы включены.

Связанный контент