从先前的问题,举个例子
\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
您只需要不隐藏 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}