Problema com markboth

Problema com markboth

Estou usando isodateo pacote desde

  1. O usuário deve inserir a data como título do capítulo no formato como no exemplo:31/12/1987
  2. O capítulo deve ter o título 31st Dec 1987,

seguindo algum post aqui cheguei em:

\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}

Porém, há algo errado \markboth, pois, se eu remover \blindtexto comando e o documento tiver apenas uma página, está tudo bem, ao adicionar texto, recebo erros e o nome do capítulo no cabeçalho fica uma bagunça. Eu gostaria de ter exatamente como cabeçalho31st Dec 1987

Nota adicionada

Estou usando isodatepois no mesmo documento preciso da mesma data mas em outro formato e, como usuário quero inseri-la apenas uma vez.

Responder1

Seu comando deve ser robusto para poder acessar argumentos móveis.

O truque é substituir newcommandporDeclareRobustCommand

Aqui está o código:

\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}

Com saída (na página 2):

insira a descrição da imagem aqui

Por favor, lembre-se do fato de que eu excluí alguns extras {(na newcommanddefinição)

Responder2

Se você precisar apenas para um capítulo, use

\chapter*{\printshortdate{31/12/1987}}

se não deveria aparecer no sumário, ou

\chapter{\protect\printshortdate{31/12/1987}}  

que é, obviamente, a mesma solução da outra resposta.

informação relacionada