Отпредыдущий вопрос, возьмите этот пример
\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
файл и перекомпилирую, то компиляция пройдет успешно.
Что можно сделать, чтобы избежать необходимости вручную удалять файл AUX при переходе с with- lineno
на without- 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}