如何在 \section 命令后设置右标记?

如何在 \section 命令后设置右标记?

我需要排版一本章节名称很长的书。长名称应该出现在普通文本和目录中,但不会出现在页眉中,所以我不能使用可选参数。 \sectionmark是我的炸薯条,但只适用于开始后的页面,\section因为页面上的第一个标记命令赢得了页眉中的位置。

\section即使已经设置了页眉,是否可以设置当前页面的页眉?

\documentclass{book}

\usepackage{lipsum}

\begin{document}
    \chapter{Test}
    \lipsum
    \section{A Section}
    \lipsum[3-5]
    \section{A very long section title, which doesn't
             fit in the header because it's extremly long}
    \sectionmark{Short title}
    \lipsum[1-14]
\end{document}

这个例子非常简约。我必须使用模板来fancyhdr更改布局。


我发现答案但它只适用于章节,因为它们总是恰好在正确的页面上,因此\chaptermark在下一个左页面上给出所需的结果。


跟进我的回答的问题

是否可以编写一个脚本(Perl 或任何在 Mac OS X 上运行的脚本)来转换

\section{long text}
\sectionmark{short text}

\section[long text]{long text\sectionmark{short text}}

或者

\section{long text}[short text]

我无法确保 中没有换行符,或者和long text之间是否有换行符。\section\sectionmark

我再次问了后续问题这里在 StackOverflow 上。

答案1

一种可能是使用如下语法

\section[toc entry]{title}[header entry]

和你的类似。这里有一种方法:

\documentclass{book}

\usepackage{xparse,lipsum}

\makeatletter
\let\tobi@kept@section\section
\RenewDocumentCommand{\section}{s}
  {\IfBooleanTF{#1}{\tobi@kept@ssection*}{\tobi@section}}
\NewDocumentCommand{\tobi@section}{o m o}
  {\IfNoValueTF{#3}% No short title for the header
     {\IfNoValueTF{#1}% No title for the toc
        {\tobi@kept@section{#2}}
        {\tobi@kept@section[#1]{#2}}%
     }
     {\IfNoValueTF{#1}% No title for the toc
        {\tobi@kept@section[#2]{#2\sectionmark{#3}}\sectionmark{#3}}
        {\tobi@kept@section[#1]{#2\sectionmark{#3}}\sectionmark{#3}}%
    }%
  }
\makeatother

\begin{document}
\tableofcontents
\chapter{Test}
\lipsum

\section{A Section}

\lipsum[3-5]

\section
  [A very long section title, which doesn't fit
   in the header because it's extremely long]
  {A very long section title, which doesn't fit\\
   in the header because it's extremly long}[Short title]

\lipsum[1-12]

\section
  {A very long section title, which doesn't fit
   in the header because it's extremly long}[Short title, but longer]

\lipsum[1-14]

\end{document}

方法memoir

\section[toc entry][header entry]{title}

但我更喜欢稍后再添加标题条目(使用它来实现它也更容易xparse)。

答案2

我找到了一种方法这里(查看链接页面)。似乎可行,但我想知道是否有无需更改代码的方法?

\documentclass{book}

\usepackage{lipsum}

\begin{document}
    \tableofcontents
    \chapter{Test}
    \lipsum
    \section{A Section}
    \lipsum[3-5]
    \section[% necessary to keep \sectionmark away from ToC
        A very long section title, which doesn't fit in
        the header because it's extremly long
    ]{%
        A very long section title, which doesn't fit in
        the header because it's extremly long%
        \sectionmark{Short title}% changes the head for the current page
    }
    \sectionmark{Short title}% changes the head for following pages
    \lipsum[1-14]
\end{document}

答案3

如果titlesec可以使用,只需写:

\usepackage[toctitles]{titlesec}

这样,分段命令中的可选参数仅用于标题,而对于目录条目则使用完整标题。

答案4

在 KOMA-Script 中,现在可以使用键值列表作为\section等的可选参数,以不同方式设置 ToC 条目和页眉。首先必须使用headings = optiontoheadandtoc|optiontohead|optiontotoc类选项激活此功能:

  • optiontoheadandtoc:与默认行为相同,即可选参数用于目录和头部标记,但可选的 keyval 语法已启用。
  • optiontohead:可选参数仅用于头标记(并且启用可选的 keyval 语法)
  • optiontotoc:可选参数仅用于 ToC(并且启用了可选的 keyval 语法)

使用可选的 keyval 语法使用head={head mark}和/或tocentry={toc}

\documentclass[%
   headings = optiontoheadandtoc,% or 'optiontohead' or 'optiontotoc'
]{scrbook}

\usepackage{lipsum}

\begin{document}
\tableofcontents
\chapter{Headline}
\lipsum[1-10]
\chapter[ToC and Page Head]{Headline}
\lipsum[1-10]
\chapter[tocentry={ToC}]{Headline}
\lipsum[1-10]
\chapter[head={Page Head}]{Headline}
\lipsum[1-10]
\chapter[tocentry={ToC},head={Page Head}]{Headline}
\lipsum[1-10]
\end{document}

相关内容