ファイル名に引数を渡して .tex ファイルを素早く切り替えるにはどうすればよいでしょうか?

ファイル名に引数を渡して .tex ファイルを素早く切り替えるにはどうすればよいでしょうか?

例えば

類似したファイル名構造を持つ 2 つの 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この場合、 expandingから派生したフレーズは\jobname

  • .log ファイルの作成: .log ファイルの名前は になりますfoobar.log
  • メインの .aux ファイルを作成します。これは という名前になりますfoobar.aux
  • 目次のデータを保持する .toc ファイルを作成します。このファイルは という名前になりますfoobar.toc
  • 図のリストのデータを保持する .lof ファイルを作成します。このファイルは という名前になりますfoobar.lof
  • テーブルのリストのデータを保持する .lot ファイルを作成します。このファイルの名前は になりますfoobar.lot

以下の私の提案では、LaTeXが処理する必要がある。の中に通常の方法つまり、物事はコンパイルされるそれなし提供する‑‑jobname-オプション

したがって、以下の私の提案は、内部的に -option を利用するように設定されている (オンライン) LaTeX プラットフォーム/TeX エディター/ユーザー インターフェイスを使用する人には適していません‑‑jobname


万一に備えて

  1. コンパイル時に の定義が\prjindex「自動検出」される(「手動で」定義されないため)すべてのファイルの名前は、プロジェクトを示し、空でなく、アンダースコア()を含まないパターンです。Projekt_⟨#1⟩_⟨#2⟩.tex⟨#1⟩_
、 そして

  1. コンパイル中に定義が\prjindex常に「自動検出」される「スタンドアロンコンパイル」ファイルに対してLaTeXを呼び出すそれなし-option を呼び出す‑‑jobname(これは、-primitive の展開が\jobnameコンパイルを開始するために使用されたファイルの名前 (拡張子なし) を形成することを意味します)
、次のように動作するマクロを提供できます\GetPrjindexFromJobnameIfUndefined

マクロが\prjindexすでに定義されている場合は何も実行されません。

マクロが\prjindex定義されていない場合は、 - プリミティブの展開が\jobnameパターン であるかどうかをチェックします。そのパターンでない場合は、エラー メッセージがトリガーされます。そのパターンである場合は、 が空かどうかが調べられます。空の場合は、エラー メッセージがトリガーされます。空でない場合は、マクロがに展開するように定義されます。Projekt_⟨#1⟩_⟨#2⟩⟨#1⟩\prjindex⟨#1⟩

プロジェクトのファイル構造のその部分がどのように構成されているか、また、単一のファイルを「スタンドアロン」でコンパイルしたり、またはを介してマスター tex ファイルから呼び出されたときにコンパイルしたりできるかどうかについて、あまり詳細に説明されていないため、そのルーチンが役立つかどうかは判断できません。Projekt_⟨#1⟩_⟨#2⟩.tex\input\include

すべてのプロジェクト ファイルが何らかの形で同じプリアンブルを共有している場合は、そのプリアンブルを介してこのルーチンをすべてのプロジェクト ファイルで利用できるようにできる可能性があります。

おそらく、そのルーチン(およびその呼び出し)を、すでに定義されているpreamble.tex.場合には何もしないルーチンに含めることができます\prjindex
したがって、

  • master.tex定義できるのは\prjindex 前に入力していますpreamble.tex
  • ファイルの 1 つをスタンドアロン コンパイルするシナリオでは、 がまだ定義されていない間にを入力することになり、の展開の結果を調べることで、ルーチンが を「自動検出」して定義するようになります。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}

ちなみに、ルーチンをテストするために、上記の例を として保存し、異なる値で -option を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.texProjekt_B_cp1.texProjekt_B_cp2.texProjekt_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を2回実行した後、

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.

ご覧のとおり、必要なファイルが含まれています。

関連情報