É possível usar o nome longo e o nome abreviado da seção nos cabeçalhos?

É possível usar o nome longo e o nome abreviado da seção nos cabeçalhos?

Estou usando fancyhdre seguindoesta respostaEu redefini \sectionmarkcomo:

\renewcommand{\sectionmark}[1]{\markboth{#1}{}}

para que

\fancyhead[RO,LE]{\leftmark}

fornece o nome da seção atual no cabeçalho à direita para páginas ímpares e à esquerda para páginas pares. Isto pode parecer estranho, mas eu também gostaria que ocurtonome da seção para ir nooutrolado do cabeçalho. Então, por exemplo, se eu declarei

\section[short name]{long name}

então minhas páginas teriam cabeçalhos com "nome curto" de um lado e "nome longo" do outro. Isso pode ser feito? Presumo que precisaria usar \fancyhead[RE,LO]{\rightmark}coisas projetadas para \rightmarkproduzir o nome abreviado da seção. Mas não tive sucesso com isso. Além disso, ao fornecer um nome abreviado para \section[]{}, o nome abreviado é usado em \leftmarkseu lugar.

(Por que estou fazendo isso? Cada uma dessas seções tem um novo nome sob uma nova convenção de nomenclatura e um nome antigo sob uma convenção de nomenclatura antiga. Estou tentando trapacear e usar \section[]{}para declarar o nome novo e o antigo, e ter ambos aparecerão no cabeçalho. Não haverá índice neste documento e não prevejo nenhum outro uso de nomes abreviados.)

Responder1

É feio, mas funciona.

\documentclass{article}
\usepackage{everypage}
\usepackage{lipsum}

\newlength{\headeroffset}
\newcommand{\shortname}{}
\newcommand{\longname}{}

\newcommand{\myhead}[2]% #1 = short name, #2 = long name
{\def\shortname{#1}%
\def\longname{#2}%
\settodepth{\headeroffset}{{#1}{#2}}% distance from baseline to bottom
\global\headeroffset=\headeroffset}

\newcommand{\writeheader}{%
\begingroup% preserve global \headeroffset
\advance \headeroffset by -\topmargin% to top of header
\advance \headeroffset by -\headheight% to botom of header
\ifodd\value{page}\raisebox{\headeroffset}[0pt][0pt]{\hspace{\oddsidemargin}%
  \makebox[\textwidth][l]{{\shortname}\hfill{\longname}}%
  \hspace{-\textwidth}\hspace{-\oddsidemargin}}% return cursor to left
\else\raisebox{\headeroffset}[0pt][0pt]{\hspace{\evensidemargin}%
  \makebox[\textwidth][l]{{\longname}\hfill{\shortname}}%
  \hspace{-\textwidth}\hspace{-\evensidemargin}}% return cursor to left
\fi\endgroup}
\AddEverypageHook{\writeheader}

\begin{document}
\pagestyle{plain}
\myhead{Short name}{This is a long name}
\lipsum[1-12]
\end{document}

informação relacionada