我正在使用软件包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
插入命令而引起的;因此,请执行以下步骤\@LN
aux
- 使用软件包编译文档
- 注释掉包
- 再次编译
将会产生错误,因为该命令\@LN
仍在aux
文件中,但尚未定义。