lineno をコメントアウトし、ltxcmds 経由でそれに関連するコマンドを無効にすると、aux ファイルを手動で削除しない限りコンパイルに失敗します。

lineno をコメントアウトし、ltxcmds 経由でそれに関連するコマンドを無効にすると、aux ファイルを手動で削除しない限りコンパイルに失敗します。

から以前の質問この例を見てみましょう

\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

\@ifpackageloadedaux コマンドが何もしないように定義できるように、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}

関連情報