我正在尝试编写一份文件,其中每个章节的标题都对应一个给定的日期。日期必须格式化,应该在标题中2014/01/03
显示。3rd January 2014
我试图isodate
像这样使用该包:
\documentclass[english]{report}
\usepackage{verbatim}
\usepackage{isodate}
\usepackage{hyperref}
\begin{document}
\tableofcontents
\newpage
%Date formatting routines
\dateinputformat{tex}
\origdate
\section{\printdate{2014/01/03}}
% Some normal lines of text
\verbatiminput{../20140103.txt}
\pagebreak
\section{\printdate{2014/01/04}}
% Some normal lines of text
\verbatiminput{../20140104.txt}
\pagebreak
\end{document}
但这是报告错误。
一些细节:
- 该文件将包含 50 多个不同的部分(每个部分都有不同的日期)。
- 我不介意使用其他日期格式包或选项
- 我有一个脚本,可以自动根据文件名生成部分块。
- 我曾尝试用
\printdate
来逃避protect
,但没有成功。
我读过了这问题。但是,我需要很多不同的部分,每个部分都有不同的日期。我想必须有一种简单的方法来做到这一点。
答案1
“问题”是hyperref
——它试图自动创建书签,将pdf string
内容写入书签。显然\printdate
不提供此类内容。可以使用选项pdf string
阻止使用书签。bookmarks=false
hyperref
但是,一个可行的解决方案是使用,而不是使用书签中的“正确”日期格式\texorpdfstring{\printdate{...}}{...}
,其中第二个参数内容转到书签,第一个参数用于章节标题/目录。
\documentclass[english]{report}
\usepackage{verbatim}
\usepackage{isodate}
\usepackage{hyperref}
\usepackage{bookmark}
\newcommand{\printdatetitle}[1]{%
\texorpdfstring{\printdate{#1}}{#1}%
}
\makeatletter
%\providecommand{\@nil}
\makeatother
\dateinputformat{tex}
\begin{document}
\tableofcontents
\chapter{First}
\section{\printdatetitle{2014/1/3}}
\end{document}
答案2
既然你说你不介意使用另一个包,那么这里有一个使用的解决方案datetime2
而是。此包是 的替代品datetime
,旨在提供可扩展的命令,以便日期可用于书签。示例:
\documentclass[english]{report}
\usepackage[en-GB]{datetime2}
\usepackage{hyperref}
\def\iprintdate#1/#2/#3/{\DTMdisplaydate{#1}{#2}{#3}{-1}}
\newcommand*{\printdate}[1]{\iprintdate#1/}
\begin{document}
\tableofcontents
\newpage
\section{\printdate{2014/01/03}}
Some normal lines of text
\pagebreak
\section{\printdate{2014/01/04}}
Some normal lines of text
\pagebreak
\end{document}
日期在书签中显示为“2014 年 1 月 3 日”和“2014 年 1 月 4 日”(以及在目录和章节标题中)。
如果你还没有安装它们,除了datetime2
,你还需要安装datetime2-english
(对于en-GB
选项)和tracklang
。