Estou usando isodate
o pacote desde
- O usuário deve inserir a data como título do capítulo no formato como no exemplo:
31/12/1987
- 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 \blindtext
o 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 isodate
pois 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 newcommand
porDeclareRobustCommand
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):
Por favor, lembre-se do fato de que eu excluí alguns extras {
(na newcommand
definiçã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.