Das Auskommentieren von lineno und das Deaktivieren der damit verbundenen Befehle über ltxcmds schlägt fehl, es sei denn, ich lösche die AUX-Datei manuell

Das Auskommentieren von lineno und das Deaktivieren der damit verbundenen Befehle über ltxcmds schlägt fehl, es sei denn, ich lösche die AUX-Datei manuell

Auseine vorherige Frage, nehmen Sie dieses Beispiel

\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}

wobei \OnlyIfPackageLoadedverwendet wird, um lineno-bezogene Dinge verschwinden zu lassen, wenn ich ihr auskommentiere \usepackage.

Bedauerlicherweise:

  • wenn ich aus einem sauberen Verzeichnis mit THATauskommentierten Zeilen kompiliere, ist die Kompilierung erfolgreich;
  • wenn ich THATdie Zeile dekommentiere und neu kompiliere, ist die Kompilierung erfolgreich.
  • wenn ich die Zeile neu kommentiere THATund neu kompiliere, schlägt die Kompilierung fehl:
    ...
    (./main.aux
    ! Undefined control sequence.
    l.2 \@LN
            {0}{0}
    ? 
    
  • Wenn ich die .auxDatei lösche und neu kompiliere, ist die Kompilierung erfolgreich.

Was kann ich tun, um beim Wechsel von mit- linenozu ohne- die manuelle Löschung der AUX-Datei zu vermeiden lineno?

Antwort1

Sie müssen lediglich den Else-Zweig nicht ausblenden, \@ifpackageloadeddamit Sie den Aux-Befehl so definieren können, dass er nichts tut. ( ltxcmdstut hier nichts, da dies alles bereits Latex ist)

\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}

verwandte Informationen