私は を使っており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}