Skip to content

Instantly share code, notes, and snippets.

@yarakos95
Created March 30, 2021 15:43
Show Gist options
  • Save yarakos95/8ec83b0925fccfc304862af2350f2f71 to your computer and use it in GitHub Desktop.
Save yarakos95/8ec83b0925fccfc304862af2350f2f71 to your computer and use it in GitHub Desktop.
docmute を利用して分割するときの注意点

docmute を利用して分割するときの注意点

docmute | CTAN

docmute はサブファイル(子ファイル) のプリアンブルを無視してdocument 環境内のみをメインファイル(親ファイル) に挿入するパッケージとなっている. これに関しては,以下の拙文で紹介している.

分割TeX ファイルをdocmute を用いて単体/統合 コンパイルする - Qiita

この記事では紹介していなかったが,以下の記事を期に1つの問題に当たった.これを解決する方法を紹介しておきたい.

日本語 LaTeX の新常識 2021 #新常識-1-plautopatch-は必ず読み込もう - Qiita

これによれば,plautopatch を\RequirePackage することとなっている. ただし,docmute でメインファイルをタイプセットするとき,サブファイルの\documentclass より前にコマンドが存在することを許さない.これをどうにかしたい.

docmute コマンドを利用する

以下のようにサブファイルの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 の扱いに慣れるのに少し手間取った.

制御綴の話は少し難しい(とりあえず触れる程度の理解)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment