Проблема с markboth

Проблема с markboth

Я использую isodateпакет с тех пор, как

  1. Пользователь должен вставить дату в качестве названия главы в формате, как в примере:31/12/1987
  2. Глава должна иметь название 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}}  

что, конечно же, то же самое, что и решение другого ответа.

Связанный контент