我与一位合著者一起编写了一份大型文档,他负责设置我们正在使用的 LaTex 文件(即,我对所要更改的内容没有完全的自主权)。
我们有一个根文件,它做两件事:
1)加载包含命令的头文件\usepackage{}
,然后列出用户定义的命令。
2)然后使用用户定义的命令加载每个章节文件\Chapter{#}{Title}
其编码为:
\newcommand{\Chapter}[2]{
\setcounter{chapter}{\numexpr#1-1}%
\refstepcounter{chapter}%
\setcounter{eqnhelper}{0}
\setcounter{section}{0}
\setcounter{figure}{0}
\setcounter{equation}{0}
\include{#2}
}
如您所见,此命令主要只是将各种计数器重置为 0,它还有命令\setcounter{chapter}{#1}
。这样,当我们编译第 3 章和第 8 章时,它们都会正确编号。最后,它使用命令调用章节文件\include
。
每个章节文件以
% !TEX root = 00_makefile.tex
\chapter*{Chapter \thechapter\\ Chapter Title}
\label{chapter: apps of integration}
问题就在这里。假设我们编写了两个章节(例如第 3 章和第 8 章),并且我们想在第 8 章中引用第 3 章。使用 TypingChapter \ref{chapter_label}
命令会产生:章节 <-(看到空白了吗?)。这是为什么?我们该如何修复它?
我想我还应该提到,这是正在使用的\documentclass{report}
,而我们没有使用该hyperref
包。
更新:我刚刚意识到我也无法在章节本身中引用它。在第 3 章中,我添加了这一行This is chapter \ref{chapter3}
,但在“章节”一词后面仍然有一个空格。
答案1
正确的章节引用需要\refstepcounter{chapter}
类似两个都步进chapter
计数器(增加它),并添加适当的锚点以供参考。您缺少后者(因为设置它类似于步进,处理前者)。
为了快速解决问题,您应该尝试将命令更改\setcounter{chapter}{#1}
为
\setcounter{chapter}{\numexpr#1-1}%
\refstepcounter{chapter}%
这会将计数器设置chapter
为比所需值小一,然后执行正确引用所需的必要“步骤和锚定”。如果您无权访问这些文件,可以使用以下方法进行修补etoolbox
是否知道包含问题的适当命令。
附注:尽量避免在标签(或一般的控制序列)内使用空格。例如,最好使用\label{chapter:apps-of-integration}
。
答案2
包含章节的机制可能不是实现此目的的最佳方式。您是否考虑过让 LaTeX 来完成这项工作?
例如,如果您将每个章节都写在自己的文件中,则可以用\include
该命令将它们包含进去。该\includeonly
命令可用于确定哪些章节文件应该真正包含进去,哪些不应该包含进去。
这种机制的优点是,只要您至少包含过一次交叉引用文件,交叉引用仍然会有效。
\includeonly{Introduction,FirstChapter}
...
\begin{document}
\include{Introduction} % included.
\include{FirstChapter} % included.
\include{SecondChapter} % not included.
\end{document}
这里Introduction.tex
,、FirstChapter.tex
和SecondChapter.tex
是可以包含在文档正文中的 LaTeX 文件。该\includeonly
命令告诉 LaTeX 只应包含Introduction.tex
和。在中,您可以引用已定义的标签和,并且如果在之前的 LaTeX 运行中将它们放入参数列表中,您将获得标签的正确数字/字母。FirstChapter.tex
FirstChapter.tex
SecondChapter.tex
SecondChapter
\includeonly
有关详细信息,请参阅For more information, see英国 TUG 常见问题解答。