ヘッダーでセクションの長い名前と短い名前の両方を使用することは可能ですか?

ヘッダーでセクションの長い名前と短い名前の両方を使用することは可能ですか?

私は を使っておりfancyhdrこの答え次のように再定義しました\sectionmark

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

となることによって

\fancyhead[RO,LE]{\leftmark}

奇数ページの場合は右側のヘッダーに、偶数ページの場合は左側のヘッダーに現在のセクション名を表示します。奇妙に聞こえるかもしれませんが、短いセクション名他のヘッダーの横に表示します。例えば、次のように宣言した場合

\section[short name]{long name}

すると、ページのヘッダーの片側には「短い名前」、もう片側には「長い名前」が表示されます。これは可能ですか?セクションの短い名前を生成する\fancyhead[RE,LO]{\rightmark}ように設計する必要があると思います\rightmark。しかし、まだうまくいきませんでした。また、 に短い名前を指定すると\section[]{}、代わりに でその短い名前が使用されます\leftmark

(なぜこのようなことをするのでしょうか。これらのセクションにはそれぞれ、新しい命名規則に基づく新しい名前と、古い命名規則に基づく古い名前があります。私は、\section[]{}新しい名前と古い名前の両方を宣言し、両方をヘッダーに表示するようにごまかそうとしています。このドキュメントには目次はなく、短縮名が他に使用される予定はありません。)

答え1

醜いですが、機能します。

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

関連情報