我正在使用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}