[LaTeX]subfilesでマクロを書くときの注意点
長文の報告書を作成するときにsubfilesパッケージを使っています。先日TeXLiveをアップデート(2018-->2021)したところ、メインファイル側のコンパイル時に自作マクロを使用するところでundefined control sequenceエラーが出るようになりました。サブファイル単体ではコンパイルは通ります。自力で調べたところ、マクロをサブファイルのプリアンブル(\bigin{document}の前)に書いていたのが原因でした。
公式ドキュメントによると、
If LATEX is run on the subfile, the line \documentclass[..]{subfiles} is
replaced by the preamble of the main file (including its \documentclass
command). The rest of the subfile is processed normally.
If LATEX is run on the main file, the subfile is loaded like with an \input
command, except that the preamble of the subfile up to \begin{document}
as well as \end{document} and the lines following it are ignored.
つまりsubfileを実行するときはsubfileのプリアンブルを読みますが、mainを実行するときsubfileのプリアンブルは無視します。subfileのプリアンブルに書かれたマクロは共有されず、全体のコンパイルを通すためには本文\begin{docment}より下に書く必要があるということです。
例
同じ階層にmain.texとsub.texがあると想定します。
main.tex
\docmentclass[dvipdfmx]{jsarticle}
...
\usepackage{}
\begin{document}
...
\subfile{sub}
...
\end{document}
sub.tex
\documentclass[main]{subfiles}
% ここにマクロを書くとコンパイル時にエラー
%\newcommand{\macroa}[1]
%{
% execute sample macro #1
%}
\begin{document}
\newcommand{\macroa}[1]
{
execute sample macro #1
}
%
\macroa{OK}
\end{document}
sub.texを上記のように書いている場合はmain、subどちらのコンパイルも問題ありませんが、コメント部のようにマクロを定義するとsubのコンパイルは通るもののmainのコンパイルは通りません。
またOverleafによると、プリアンブルの最後でsubfilesをusepackageするのがいいとありました。しかしこれはどこに書こうととくに問題となっている感じはなく、マクロに関してはmainのプリアンブル部分にさえ書かれていればsubfile側で呼び出すことができました。
この記事が気に入ったらサポートをしてみませんか?