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