我使用计数器来增加日记中的月份,并datetime
使用包将计数器转换为月份。然后月份成为文档中的章节标题,因此我有如下内容:
\documentclass{scrbook}
\usepackage[french]{babel}
\usepackage{datetime}
\usepackage{hyperref}
\usepackage{lipsum}
\newcounter{month}
\newcommand{\newmonth}{%
\addtocounter{month}{1}%
\chapter{\monthname[\themonth]}
}
\begin{document}
\newmonth
\lipsum
\newmonth
\lipsum
\end{document}
文本中月份显示正常,但 PDF 索引中显示不正确。我将此问题追溯到\addchaptertocentry
,因为我可以通过调用 来重现它\addchaptertocentry{\monthname[\themonth]}
。
该.aux
文件逐字包含以下命令:
\@writefile{toc}{\contentsline {chapter}{\numberline {1}\monthname [1]}{1}{chapter.1}}
我怎样才能使\monthname
命令扩展以便 PDF 索引看起来正确?
编辑:
我在这里使用日期时间的原因是为了支持多种语言(本例中为法语),因此我宁愿避免重新定义月份列表。
答案1
如果你不需要使其不可扩展的可选参数,你可以这样做
此版本包含语言测试和法语
\documentclass{scrbook}
\usepackage[french]{babel}
\usepackage{datetime}
\usepackage{hyperref}
\usepackage{lipsum}
\newcounter{month}
\makeatletter
\def\@orgargctr=#1\relax\ifcase\@orgargctr{\ifcase#1 }
\expandafter\def\expandafter\monthname\expandafter{\csname\string\monthname\endcsname[\the\c@month]}
\expandafter\def\csname\string\monthname\endcsname[#1]{%
\if@dt@multilingual
\@ifundefined {monthname\languagename}%
{\csname \string\monthname english \endcsname [#1]}%
{\csname \string\monthname\languagename \endcsname [#1]}%
\else
\csname\string\monthnameenglish\endcsname [#1]\fi}
%\expandafter\def\expandafter\monthnameenglish\expandafter{\csname\string\monthnameenglish\endcsname}
\makeatother
\newcommand{\newmonth}{%
\addtocounter{month}{1}%
\chapter{\monthname}
}
\begin{document}
\newmonth
\lipsum
\newmonth
\lipsum
\end{document}