标题中单独的章节编号

标题中单独的章节编号

我正在写一本书,想要单独的奇数页眉和偶数页眉,分别在偶数页/奇数页上居中显示章节/节标题。我想在两页的页面外侧打印节号。

我认为这很容易做到,例如,

\fancyhead[LE]{\thesection}
\fancyhead[RO]{\thesection}

不幸的是,当新的章节标题从页面顶部开始时,这种方法就会失败,在这种情况下,上一页将标有新的章节编号。我知道这是因为 \thesection 扩展得太晚,但我想要一个简单的解决方案。另外,我不能使用 \rightmark 来存储章节编号,因为我用它来存储章节名称。

这是一个说明该问题的最小工作示例:

\documentclass{article}
\usepackage{lipsum}

\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhead{}
\fancyhead[L]{\leftmark}
\fancyhead[R]{\thesection}

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

\begin{document}
\section{Introduction}
\lipsum[1-4]
\lipsum[2]

\section{Blah}
\lipsum[1]
\end{document}

右侧应该有一个 1

答案1

下面从\leftmark您用于完整章节标题的章节编号中提取章节编号。章节编号在开头被标识为任何内容,直到.␣看到。否则不设置任何内容。

\documentclass{article}
\usepackage{lipsum}

\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhead{}
\fancyhead[L]{\leftmark}
\fancyhead[R]{\leftmarksection}

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

\makeatletter
\newcommand*{\leftmarksection}{%
  \begingroup
    \protected@edef\temp{\leftmark}%
    \expandafter\@leftmarksection\temp. \@nil
  \endgroup
}
\def\@leftmarksection#1. #2\@nil{%
  \def\temp{#2}%
  \ifx\temp\@empty
  \else
    #1%
  \fi  
}
\makeatother

\begin{document}
Title page
\newpage  
\section{Introduction}
\lipsum[1-4]
\lipsum[2]  

\section{Blah}
\lipsum[1]
\end{document}

答案2

也许你想要这个,但我不确定在你的实际情况中你需要哪个标记。

\documentclass{article}
\usepackage{lipsum}

\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhead{}
\fancyhead[L]{\leftmark}
\fancyhead[R]{\expandafter\numberonly\romannumeral`\^^@\leftmark!!}
\def\numberonly#1. #2!!{#1}

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

\begin{document}
\section{Introduction}
\lipsum[1-4]
\lipsum[2]

\section{Blah}
\lipsum[1]
\end{document}

答案3

感谢 David 和 Heiko 的回答。我想要一个我能理解的解决方案,所以我使用 xstring 包来实现从 \leftmark 中解压章节编号和标题:

\documentclass{article}
\usepackage{lipsum}
\usepackage{xstring}

\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhead{}
\fancyhead[L]{\StrBehind{\leftmark}{+}}
\fancyhead[R]{\StrBefore{\leftmark}{+}}

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

\begin{document}
\section{Introduction}
\lipsum[1-4]
\lipsum[2]

\section{Blah}
\lipsum[1]
\end{document}

相关内容