\addchaptertocentry 中的扩展命令

\addchaptertocentry 中的扩展命令

我使用计数器来增加日记中的月份,并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}

相关内容