目标

目标

目标

为了使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一个唯一的字符串,这样所有附录集都可以单独编号。由于我不喜欢在新集的开头出现一大堆\renewcommands,所以我决定将其全部包装在一个宏中。这可能可以进一步优化,请参阅下面的一个小列表。

优点是您还可以对每个组内的附录使用相同的编号进行分组(例如 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&#1&% 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

相关内容