如果我使用 secnumdepth 和 \MakeUppercase,pdfbookmark 将不起作用

如果我使用 secnumdepth 和 \MakeUppercase,pdfbookmark 将不起作用

我想numbered, unnumbered section通过 \setcounter{secnumdepth}{5}命令来控制。

我的要求是默认情况下所有部分标题都应不编号。所以我将设置默认值\setcounter{secnumdepth}{0}。如果我给出\numbered命令,所有标题级别都应编号。所以我应该创建命令\newcommand{\numbered}{\setcounter{secnumdepth}{5}}

另一个要求是section级别应大写。所以我使用命令命令\MakeUppercase

但问题出现在以下案例中(书签链接不起作用):

同时我使用两个命令\setcounter{secnumdepth}{0} and \MakeUppercase,pdfbookmark 不起作用。

情况1。 \setcounter{secnumdepth}{0}并且\MakeUppercase使用的两个命令 - pdfbookmark 不起作用。

案例 2。 \setcounter{secnumdepth}{5}并且\MakeUppercase使用的两个命令-pdfbookmark 正在运行。

我不知道第一种情况是否有效。第二种情况有效。请提供建议。

或者我使用下面提到的 pdfstring 命令。但这个命令不起作用

\pdfstringdefDisableCommands{%
  \let\MakeUppercase\relax%
}

梅威瑟:

\documentclass{article}

\usepackage{hyperref}
\usepackage{lipsum}

\setcounter{secnumdepth}{0}

\makeatletter
\newcommand{\numbered}{\setcounter{secnumdepth}{5}}
\makeatother

\hypersetup{%
colorlinks,%
linkcolor=black,%
citecolor=gray,%
bookmarks=true,
bookmarksopen=true,%
bookmarksnumbered=true,%
pdftitle={\@mytitle},%
pdfauthor={Maria Luisa Di Vona},%
pdfkeywords={},%
pdfsubject={}%
}

\pdfstringdefDisableCommands{%
  \let\MakeUppercase\relax%
}

\makeatletter
\renewcommand\section{\@startsection {section}{1}{\z@}%
                                   {-2.8ex}%
                                   {8.25pt}%
                                   {\raggedright\MakeUppercase}}
\makeatother

\begin{document}
\title{This is the sample title}
\author{Steven}

\maketitle


\section{This is the sample section one $\alpha$}

\lipsum[1-5]
\section{Second section}

\lipsum[5-10]

\section{Second section}
\lipsum[4]
\lipsum[5]

\section{This is the sample section two}

\lipsum[1]
\lipsum[1]


\end{document}

答案1

\MakeUppercase还将部分的目标名称转换为大写。结果是书签具有错误的链接目标。以下示例通过移动到来修复它\MakeUppercase\Sectionformat该宏由包引入nameref,通常在中加载\begin{document}。该示例先前加载了包以重新定义\SectionFormat。第一个参数是标题,第二个参数是级别编号。

另一个问题:

  • 当包bookmark加载时,书签会更快地更新。
  • \alphaunicode由 Unicode 书签(选项或pdfencoding=auto)以及psdextra添加大量数学符号的选项支持。
  • \@mytitle命中\makeatletter。而且它未定义,因此示例直接将标题放在中\pdftitle。还可以定义一个宏,稍后在选项pdftitle和命令中使用\title

完整示例:

\documentclass{article}

\usepackage{hyperref}
\usepackage{bookmark}
\usepackage{lipsum}

\setcounter{secnumdepth}{0}

\hypersetup{%
  colorlinks,%
  linkcolor=black,%
  citecolor=gray,%
  bookmarksopen=true,%
  bookmarksnumbered=true,%
  pdfencoding=auto,%
  psdextra,%
  pdftitle={This is a sample title},%
  pdfauthor={Maria Luisa Di Vona},%
  pdfkeywords={},%
  pdfsubject={}%
}

\pdfstringdefDisableCommands{%
  \let\MakeUppercase\relax%
}

\usepackage{nameref}
\makeatletter
\renewcommand{\Sectionformat}[2]{%
  \ifnum#2=1 %
    \expandafter\MakeUppercase
  \else
    \expandafter\@firstofone
  \fi
  {#1}%
}
\renewcommand\section{\@startsection {section}{1}{\z@}%
                                   {-2.8ex}%
                                   {8.25pt}%
                                   {\raggedright}}
\makeatother

\begin{document}
\title{This is the sample title}
\author{Steven}

\maketitle

\section{This is the sample section one $\alpha$}

\lipsum[1-5]
\section{Second section}

\lipsum[5-10]

\section{Second section}
\lipsum[4]
\lipsum[5]

\section{This is the sample section two}

\lipsum[1]
\lipsum[1]
\end{document}

相关内容