Я использую isodate
пакет с тех пор, как
- Пользователь должен вставить дату в качестве названия главы в формате, как в примере:
31/12/1987
- Глава должна иметь название
31st Dec 1987
,
после некоторого поста здесь я пришел к:
\documentclass{book}
\usepackage[orig,british]{isodate}
\usepackage{blindtext}
\makeatletter
\def\short@month@english{\ifcase\month\or
Jan\or Feb\or Mar\or Apr\or May\or Jun\or
Jul\or Aug\or Sep\or Oct\or Nov\or Dec\fi}
\newcommand{\printshortdate}[1]{{%
\let\month@english\short@month@english% Update English month lookup (locally)
\printdate{#1}}}% Call traditional \printdate
\newcommand{\printsupdate}[1]{{
\let\day@english\supday@english
\printdate{#1}
}}
\makeatother
\newcommand{\chaplab}[1]{\label{chap:#1}}
\begin{document}
\chapter{\printshortdate{31/12/1987}}
\blindtext
\blindtext
\blindtext
\blindtext
\blindtext
\blindtext
\end{document}
Однако есть что-то не так с \markboth
тем, что если я удаляю \blindtext
команду и документ состоит всего из одной страницы, все в порядке, при добавлении текста я получаю ошибки и название главы в заголовке становится беспорядочным. Я хотел бы иметь в качестве заголовка именно31st Dec 1987
Примечание добавлено
Я использую его isodate
, поскольку в том же документе мне нужна та же дата, но в другом формате, и, как пользователь, я хочу вставить ее только один раз.
решение1
Ваша команда должна быть надежной, чтобы перейти к мобильным аргументам.
Хитрость заключается в замене newcommand
наDeclareRobustCommand
Вот код:
\documentclass{book}
\usepackage[orig,british]{isodate}
\usepackage{lipsum}
\makeatletter
\def\short@month@english{\ifcase\month\or
Jan\or Feb\or Mar\or Apr\or May\or Jun\or
Jul\or Aug\or Sep\or Oct\or Nov\or Dec\fi}
\DeclareRobustCommand{\printshortdate}[1]{%
\let\month@english\short@month@english% Update English month lookup (locally)
\printdate{#1}%
}% Call traditional \printdate
\makeatother
\begin{document}
\chapter{\printshortdate{31/12/1987}}
\lipsum[4-12]
\end{document}
С выходом (на странице 2):
Обратите внимание, что я удалил несколько лишних {
букв (в newcommand
определении).
решение2
Если вам это нужно только для одной главы, используйте
\chapter*{\printshortdate{31/12/1987}}
если он не должен появляться в оглавлении, или
\chapter{\protect\printshortdate{31/12/1987}}
что, конечно же, то же самое, что и решение другого ответа.