我需要排版一本章节名称很长的书。长名称应该出现在普通文本和目录中,但不会出现在页眉中,所以我不能使用可选参数。
\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}