目标
为了使memoir
文档包含多个章节并叙述故事,需要一组附录附录,主文档中包含附加数据,第二组附录称为附件,附加地图等另行提供,主文档中只有附件的简短描述。最好附录以 编号\Alph
(默认),附件以 编号\Roman
。
问题
重新定义\appendix[|toc|page]name
命令没有问题,第二个\appendix
或\setcounter{chapter}{0}
重新开始编号,并\renewcommand{\thechapter}{\Roman{chapter}}
可以很好地更新标题。但是,bookmarks
将页面锚点添加为Appendix.[A|B|C|...]
,对于附录和附件并因此抱怨
具有相同标识符(名称{appendix.A})的目标已被使用,重复项被忽略
问题
我怎样才能将标识符前缀重命名为附件,或者将标识符编号更改为罗马数字,以使目录中的书签正确无误?
代码
\documentclass{memoir}
\usepackage{bookmark}
\begin{document}
\tableofcontents
\chapter{Foo}
\appendix
\appendixpage
\chapter{First appendix}
%\backmatter % Really only a temporary workaround, no real solution
\renewcommand{\appendixname}{Attachment}
\renewcommand{\appendixpagename}{Attachments}
\renewcommand{\appendixtocname}{Attachments}
% Either of the following two lines resets the chapter numbers, neither fixes the problem
%\appendix
\setcounter{chapter}{0}
\renewcommand{\thechapter}{\Roman{chapter}}
\appendixpage
\chapter{A Separate File}
\end{document}
解决方法
在目录中获取正确书签的解决方法是将\backmatter
命令移到附件。但是,这会完全禁用编号,而我确实需要它们。此外,这仅在有两组附录时才有效,但也许其他人可能需要三组或四组附录,那么这不再有效。
答案1
解决方法是添加以下行
\renewcommand{\theHchapter}{\Roman{chapter}}
刚过
\setcounter{chapter}{0}
Hchapter
是 内部使用的计数器hyperref
(由 加载bookmark
),对应于chapter
。
平均能量损失
\documentclass{memoir}
\usepackage{bookmark}
\begin{document}
\tableofcontents
\chapter{Foo}
\appendix
\appendixpage
\chapter{First appendix}
%\backmatter % Really only a temporary workaround, no real solution
\renewcommand{\appendixname}{Attachment}
\renewcommand{\appendixpagename}{Attachments}
\renewcommand{\appendixtocname}{Attachments}
% Either of the following two lines resets the chapter numbers, neither fixes the problem
%\appendix
\setcounter{chapter}{0}
\renewcommand{\theHchapter}{\Roman{chapter}}
\renewcommand{\thechapter}{\Roman{chapter}}
\appendixpage
\chapter{A Separate File}
\end{document}
输出:
如果您现在点击“IA 单独文件”,您将进入正确的章节。
hyperref
否则,可以通过使用选项hypertexnames=false
而不是加载来解决此问题bookmark
:
\usepackage[hypertexnames=false]{hyperref}
或加载bookmark
并将该选项传递给hyperref
:
\PassOptionsToPackage{hypertexnames=false}{hyperref}
\usepackage{bookmark}
答案2
这个答案深受 karlkoeller 答案的启发,但在我看来,它采用了更灵活、更稳健的方法。
他提出的解决方案是:
\renewcommand{\theHchapter}{\Roman{chapter}}
大多数情况下都有效,但也不是万无一失的。假设我有一个包含九个或更多附录,然后是第一个依恋会与附录9 因为两者都有数字我。
为了解决这个问题,我们可以在前面添加\theHchapter
一个唯一的字符串,这样所有附录集都可以单独编号。由于我不喜欢在新集的开头出现一大堆\renewcommand
s,所以我决定将其全部包装在一个宏中。这可能可以进一步优化,请参阅下面的一个小列表。
优点是您还可以对每个组内的附录使用相同的编号进行分组(例如 A1、A2、A3、B1、B2、B3 或 AA、AB、AC),而不必担心附录编号冲突。
\documentclass{memoir}
\usepackage{bookmark}
% Usage: \newappendixset[<number_prefix>]{<appendixname>}{<pagename>}{<tocname>}{<numbering>}
\newcommand{\newappendixset}[5][]{
\renewcommand{\appendixname}{#2}
\renewcommand{\appendixpagename}{#3}
\renewcommand{\appendixtocname}{#4}
\setcounter{chapter}{0}
\ifx&% Only add the prefix if it isn't empty
\renewcommand{\theHchapter}{#5}
\else
\renewcommand{\theHchapter}{#1.#5}
\fi
\renewcommand{\thechapter}{#5}
}
\begin{document}
\tableofcontents
\chapter{Foo}
\appendix
\appendixpage
\chapter{First appendix}
\chapter{Second appendix}
\chapter{Third appendix}
\chapter{Fourth appendix}
\chapter{Fifth appendix}
\chapter{Sixth appendix}
\chapter{Seventh appendix}
\chapter{Eighth appendix}
\chapter{Ninth appendix}
\newappendixset[att]{Attachment}{Attachments}{Attachments}{\Roman{chapter}}
\appendixpage
\chapter{Separate File}
\end{document}
可能的改进
- 用于
pgfkeys
自动将当前集合添加到目录、插入\appendixpage
等等。 - 不完全确定通过这种方式传递编号样式的稳健性。
- 也许插入一个简单的计数器作为前缀,而不是可选参数,每次调用时都会增加
\newappendixset
。