從上一個問題,以這個例子為例
\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}
如果我註解掉它,則where\OnlyIfPackageLoaded
用於使相關的東西消失。lineno
\usepackage
很遺憾:
- 如果我從一個帶有
THAT
註解行的乾淨目錄進行編譯,則編譯成功; - 如果我取消
THAT
註解行並重新編譯,則編譯成功; - 如果我重新註解
THAT
行並重新編譯,編譯將失敗:... (./main.aux ! Undefined control sequence. l.2 \@LN {0}{0} ?
- 如果我刪除該
.aux
檔案並重新編譯,則編譯成功。
lineno
當我從 with- 轉為without- 時,如何避免手動刪除 AUX 檔案lineno
?
答案1
您只需要不隱藏 的 else 分支,\@ifpackageloaded
這樣您就可以定義 aux 指令不執行任何動作。 (ltxcmds
這裡什麼都不做,因為這都已經是乳膠了)
\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}