から以前の質問この例を見てみましょう
\documentclass{book}
\usepackage{lipsum}
\usepackage[left, pagewise]{lineno} % LINE
\usepackage{ltxcmds}
\makeatletter
\newcommand{\OnlyIfPackageLoaded}[2]{\ltx@ifpackageloaded{#1}{#2}{}}
\makeatother
\makeatletter
\OnlyIfPackageLoaded{lineno}{
\def\makeLineNumberLeft{%
\linenumberfont\llap{\hb@xt@\linenumberwidth{\LineNumber\hss}\hskip\linenumbersep}% left line number
\hskip\columnwidth% skip over column of text
\rlap{\hskip\linenumbersep\hb@xt@\linenumberwidth{\hss\LineNumber}}\hss}% right line number
\leftlinenumbers% Re-issue [left] option
}
\makeatother
\begin{document}
\OnlyIfPackageLoaded{lineno}{\linenumbers}
\lipsum[1]
\end{document}
ここで、 は、 をコメントアウトすると 関連のものが消える\OnlyIfPackageLoaded
ために使用されます。lineno
\usepackage
残念ながら:
- 行をコメントアウトしたクリーンなディレクトリからコンパイルすると
THAT
、コンパイルは成功します。 - 行のコメントを解除して再コンパイルすると
THAT
、コンパイルは成功します。 - 行を再度コメントアウトし
THAT
て再コンパイルすると、コンパイルは失敗します。... (./main.aux ! Undefined control sequence. l.2 \@LN {0}{0} ?
- ファイルを削除して再コンパイルすると
.aux
、コンパイルは成功します。
lineno
-ありから - なしに変更するときに、AUX ファイルを手動で削除する必要を回避するにはどうすればよいでしょうかlineno
?
答え1
\@ifpackageloaded
aux コマンドが何もしないように定義できるように、else ブランチを非表示にしないでください。(ltxcmds
これはすべてすでに LaTeX であるため、ここでは何もしません)
\documentclass{book}
\usepackage{lipsum}
\usepackage[left, pagewise]{lineno} % LINE
% not useful here \usepackage{ltxcmds}
\makeatletter
\newcommand{\OnlyIfPackageLoadedTF}{\@ifpackageloaded}
\newcommand{\OnlyIfPackageLoadedT}[2]{\@ifpackageloaded{#1}{#2}{}}
\makeatother
\makeatletter
\OnlyIfPackageLoadedTF{lineno}{
\def\makeLineNumberLeft{%
\linenumberfont\llap{\hb@xt@\linenumberwidth{\LineNumber\hss}\hskip\linenumbersep}% left line number
\hskip\columnwidth% skip over column of text
\rlap{\hskip\linenumbersep\hb@xt@\linenumberwidth{\hss\LineNumber}}\hss}% right line number
\leftlinenumbers% Re-issue [left] option
}
% else
{
\def\@LN#1#2{}
}
\makeatother
\begin{document}
\OnlyIfPackageLoadedT{lineno}{\linenumbers}
\lipsum[1]
\end{document}