lineno를 주석 처리하고 ltxcmds를 통해 관련 명령을 비활성화하면 aux 파일을 수동으로 삭제하지 않으면 컴파일이 실패합니다.

lineno를 주석 처리하고 ltxcmds를 통해 관련 명령을 비활성화하면 aux 파일을 수동으로 삭제하지 않으면 컴파일이 실패합니다.

에서이전 질문, 이 예를 들어보세요

\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하고 다시 컴파일하면 컴파일이 성공합니다.

linenoAUX 파일이 있는 상태에서 없는 상태로 이동할 때 AUX 파일을 수동으로 삭제하지 않으려면 어떻게 해야 합니까 lineno?

답변1

\@ifpackageloadedaux 명령이 아무 작업도 수행하지 않도록 정의할 수 있도록 else 분기를 숨기지 않아도 됩니다 . ( 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}

관련 정보