是否可以在标题中同时使用该部分的长名称和短名称?

是否可以在标题中同时使用该部分的长名称和短名称?

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

相关内容