我必须排版一份包含一些非常规章节编号的文档。有些章节级别的编号方式是不能在编号后加点,而其他章节级别则需要加点。
在文档本身中实现这一点不是问题。但是,关于hyperref
书签,我只知道\renewcommand*{\Hy@numberline}[1]{#1. }
它只是到处都放点。当我可以hyperref
像文档中一样使用精确的编号(包括点)时,这将解决问题。
这是一个可以工作的最小示例:
\documentclass[paper=a5]{scrbook}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{hyperref}
\usepackage{bookmark}
\hypersetup{
bookmarksnumbered=true
}
\makeatletter
\renewcommand*{\Hy@numberline}[1]{#1. }% for dots in bookmarks
\makeatother
\newcommand*{\partnum}[1]{% the (unorthodox) part numbering
\ifcase \value{#1}%
VALUE INCORRECT%
\or%
A.%
\or%
B.%
\or%
C. (AA)%
\or%
(BB)%
\or%
(CC)%
\or%
(DD)%
\else%
VALUE INCORRECT%
\fi%
}
\renewcommand*{\thepart}{\partnum{part}}
\renewcommand*{\thechapter}{\Roman{chapter}}
\renewcommand*{\thesection}{\alph{section}}
\RedeclareSectionCommand[tocdynnumwidth]{part}
\begin{document}
\tableofcontents
\part{Example}
\chapter{Example}
\section{Example}
\part{Example}
\part{Example}
\part{Example}
\part{Example}
\part{Example}
\end{document}
仅零件级别需要偏差(无点)。
答案1
我不会声称我理解你的编号系统。但你可以检测书签代码中的级别,并使用它来仅为级别 0 及更高级别添加点:
\documentclass[paper=a5]{scrbook}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{hyperref}
\usepackage{bookmark}
\hypersetup{
bookmarksnumbered=true
}
\makeatletter
\renewcommand*{\Hy@numberline}[1]{#1\ifnum\Hy@toclevel=-1\else.\fi\space}% for dots in bookmarks
\makeatother
\newcommand*{\partnum}[1]{% the (unorthodox) part numbering
\ifcase \value{#1}%
VALUE INCORRECT%
\or%
A.%
\or%
B.%
\or%
C. (AA)%
\or%
(BB)%
\or%
(CC)%
\or%
(DD)%
\else%
VALUE INCORRECT%
\fi%
}
\renewcommand*{\thepart}{\partnum{part}}
\renewcommand*{\thechapter}{\Roman{chapter}}
\renewcommand*{\thesection}{\alph{section}}
\RedeclareSectionCommand[tocdynnumwidth]{part}
\begin{document}
\tableofcontents
\part{Example}
\chapter{Example}
\section{Example}
\part{Example}
\part{Example}
\part{Example}
\part{Example}
\part{Example}
\end{document}