Comentar lineno y deshabilitar los comandos relacionados con él a través de ltxcmds no se compila a menos que elimine manualmente el archivo auxiliar

Comentar lineno y deshabilitar los comandos relacionados con él a través de ltxcmds no se compila a menos que elimine manualmente el archivo auxiliar

Deuna pregunta previa, toma este ejemplo

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

donde \OnlyIfPackageLoadedse usa para hacer que linenolas cosas relacionadas con - desaparezcan si comento su \usepackage.

Desafortunadamente:

  • si compilo desde un directorio limpio con THATuna línea comentada, la compilación se realiza correctamente;
  • si decomento THATla línea y vuelvo a compilar, la compilación se realiza correctamente;
  • Si vuelvo a comentar THATla línea y la vuelvo a compilar, la compilación falla:
    ...
    (./main.aux
    ! Undefined control sequence.
    l.2 \@LN
            {0}{0}
    ? 
    
  • si elimino el .auxarchivo y lo vuelvo a compilar, la compilación se realiza correctamente.

¿Qué puedo hacer para evitar tener que eliminar manualmente el archivo AUX cuando paso de sin linenoa sin lineno?

Respuesta1

Solo necesita no ocultar la rama else \@ifpackageloadedpara poder definir el comando aux para que no haga nada. ( ltxcmdsno hace nada aquí ya que todo esto ya es látex)

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

información relacionada