docmute はサブファイル(子ファイル) のプリアンブルを無視してdocument 環境内のみをメインファイル(親ファイル) に挿入するパッケージとなっている. これに関しては,以下の拙文で紹介している.
この記事では紹介していなかったが,以下の記事を期に1つの問題に当たった.これを解決する方法を紹介しておきたい.
これによれば,plautopatch を\RequirePackage
することとなっている.
ただし,docmute でメインファイルをタイプセットするとき,サブファイルの\documentclass
より前にコマンドが存在することを許さない.これをどうにかしたい.
以下のようにサブファイルの1行目に\csname docmute\endcsname
を挿入すれば解決.オシマイ.メインファイルには挿入しない.
\csname docmute\endcsname
\RequirePackage{plautopatch}
\documentclass[dvipdfmx,uplatex]{jlreq}
%
% some packages
\begin{document}
%
% sabfile document ... ...
%
\end{document}
\docmute
はdocmute パッケージで定義されているコマンドであり,\documentclass
の代わりになる.
\csname
~ \endcsname
で囲ったコマンドは定義されている場合は囲ったコマンド名で,定義されていない場合は\relax
で処理される.
\relax
は何もしない処理みたいなもの.
\csname
~ \endcsname
ではスペースを認識する.
したがって,次の例はダメ.
\csname docmute \endcsname
docmute の後の半角スペースもコマンド名の一部として認識されるからのようだ.
docmute と同じようなパッケージにsubfiles がある.このパッケージでも\documentclass
より前のコマンドを許していない.\docmute
コマンドを使って実行できそう.
出来ます.
次のように作成すればよい.
メインファイル
\RequirePackage{plautopatch}
\documentclass[dvipdfmx,uplatex]{jlreq}
\usepackage{docmute}
\usepackage{subfiles}
% some packages
\begin{document}
%
% main document ... ...
%
\end{document}
サブファイル
\csname docmute\endcsname
\RequirePackage{plautopatch}
\documentclass[.\main\file\roots]{subfiles}
\begin{document}
%
% sabfile document ... ...
%
\end{document}
\csname
~ \endcsname
の扱いに慣れるのに少し手間取った.
制御綴の話は少し難しい(とりあえず触れる程度の理解)