我想通过 将命令的结果/值/输出添加到 ToC \addcontentsline{toc}
。输出本身只包含纯文本,因此原则上应该允许它甚至在书签超链接中显示。
下面是一个例子。
\documentclass{article}
\usepackage{hyperref}
\usepackage{projlib-datetime}
\begin{document}
% \tableofcontents\bigskip
\addcontentsline{toc}{section}{\TheDate{2023-01}}
\end{document}
理想情况下,输出January 2023
应该显示在书签中,但现在我收到了警告:
Token not allowed in a PDF string (Unicode):
(hyperref) removing `\TheDate'.
我认为可能存在一些扩展问题,但有没有什么方法可以解决这个问题,以便最终的输出能够成功放入书签中?
答案1
projlib-datetime
定义\TheDate
为受保护的宏。因此,在生成书签文本时,宏仍然存在。hyperref
在这种情况下会发出警告并删除该命令。
您需要的是可扩展的\TheDate
。您可以一般使用此类命令,也可以仅在书签生成中使用\pdfstringdefDisableCommands
:
\documentclass{article}
\usepackage{hyperref}
\usepackage{projlib-datetime}
\newcommand*{\monthname}[1]{%
\ifcase #1 \or
January\or February\or March\or April\or May\or June\or
July\or August\or September\or October\or November\or
December
\fi
}
\makeatletter
\newcommand*\theYearMonth[1]{\@theYearMonth#1\\}
\newcommand*{\@theYearMonth}{}
\def\@theYearMonth#1-#2\\{\monthname{#2} #1}
\makeatother
\pdfstringdefDisableCommands{%
\let\TheDate\theYearMonth
}
\begin{document}
\tableofcontents
\addcontentsline{toc}{section}{\TheDate{2023-01}}
Test
\addcontentsline{toc}{section}{\theYearMonth{2023-02}}
Toast
\end{document}