软件包 lineno 存在问题

软件包 lineno 存在问题

我正在使用软件包lineno来校对我的文档。因此我通常会得到类似以下 MWE 的内容:

\documentclass{article}

\usepackage{blindtext}

\usepackage{ifthen}           % to use if then else
\newboolean{korrektur}        % for proofreading: true/false
 \setboolean{korrektur}{true} % choose one, comment the other
%\setboolean{korrektur}{false}

% What we need for proofreading
\ifthenelse{\boolean{korrektur}}% proofreading wanted?
{% YES:
  \usepackage{showframe}          % shows type area
  \usepackage{lineno}             % numbers lines
  \pagewiselinenumbers            % lines per page
}%
{% NO:
% error if lineno was used before:
  \typeout{***** Please delete .aux files if you get errors! *****}
% What to add here so that I get no errors?  %<=================
}

\begin{document}
\Blindtext
\end{document}

运行两次。一切都应该很好,盲文是有编号的。

现在请将%符号从第 8 行(假)移至第 7 行(真)。

因为我们之前已经运行过,所以有一个.aux文件,其中包括带有宏的行\@LN

如果你现在编译,你将得到以下错误消息(以及更多):

***** Please delete .aux files if you get errors! *****
(C:\Users\...\LaTeX\_TeX.SX\lineno\test-lineno.aux
! Undefined control sequence.
l.2 \@LN
        {0}{0}

问题:是否可以在第 20 行(参见)添加%<===========一些内容来消除错误消息?可以重置宏的含义的内容\@LN

答案1

请注意,涉及的错误\@LN报告宏可能需要 2 个参数。这从内部得到确认lineno.sty

\def\@LN#1#2{{\expandafter\@@LN
                 \csname LN@P#2C\@LN@column\expandafter\endcsname
                 \csname LN@PO#2\endcsname
                 {#1}{#2}}}

因此,只需添加

\makeatletter
\providecommand{\@LN}[2]{}
\makeatother

在序言中的“基本级别”(例如,紧接着\documentclass{article})。这将\@LN仅在尚未定义时定义(缺失的宏)。由于包\@LN通过定义,因此如果被加载\def,它将被重新定义。lineno

如果您希望在另一个命令中提供此命令(例如在条件的 false 子句中),那么您需要放置\makeatletter...\makeatother外部主要条件:

\makeatletter
\ifthenelse{..}
  {% YES:
    %...
  }{% NO:
    %...
    \providecommand{\@LN}[2]{}%
  }
\makeatother

答案2

您是否尝试从头开始重新编译(即删除该aux文件)?

我的理解是,错误是由于包在文件中lineno插入命令而引起的;因此,请执行以下步骤\@LNaux

  1. 使用软件包编译文档
  2. 注释掉包
  3. 再次编译

将会产生错误,因为该命令\@LN仍在aux文件中,但尚未定义。

相关内容