我遇到了一个问题,我正在写一篇(很长的)文档。现在我在检查文档错误时发现一些标题的格式非常糟糕:
标题很长,因此必须将其断开。目前,我在标题结束前几个字母处得到了连字符。因此它看起来像:
Chapter 2: Fooooooo baaaaaaar fooooooo baaa-
ar
当然这不是我想要的。我希望baaaar
第二行是完整的。目前我无法在最小示例中重现该问题,我将在今晚回家后尝试。
另一个问题是 LaTeX 有时会在标题的错误位置断字。在普通文本中,我给出一个减号来纠正连字符的位置,但在标题中,这不起作用,因为在标题中(使用fancyhdr
或类似的页面样式)也会出现减号。
我认为,全面停用连字符不是一个好主意。我(必须)在 A5 纸上工作,因此很容易用几个单词得到完整的一行。所以我认为,为了使文档看起来美观,需要使用连字符。
综上所述:
- 如何去除标题中的孤立项?
- 如何正确设置标题中连字符的位置?
答案1
如果您正在寻找手动解决方案,那么您可以使用它\-
来明确指示连字符的位置。
警告:您绝不应该仅使用明确的减号,因为任何文本更改都会使其无效,即使在普通文本中也是如此!
您还可以使用\mbox{word}
来防止单词被完全断开。最后,您可能希望使用\\
来明确断开一行(而不将其展开)或\linebreak
保持行宽。
但是标题文本也会进入目录,也可能进入运行页眉。因此,您要么需要确保您的修改在两个地方都是正确的(例如,\-
不会造成任何损害,但\\
可能会在那些地方造成损害),要么您需要使用标题命令的可选参数来区分这两种用途,例如,
\section[Fooooo baaaaaaar foooooo baaaaar]
{Fooooo baaaaaaar foooooo\\ baaaaar}
对于更通用的解决方案,可以禁用标题命令定义中的连字符(并确保其排版正确),但这需要在类或包文件中完成,并且取决于这些命令的基本定义。
更新
有人在评论中询问如何表示只应在目录中发生、而不应在主标题或运行页眉中发生的换行符。
不幸的是,这有点棘手,因为在标准类中,部分命令的接口不为进入目录和运行标题的材料提供不同的参数。这确实是 2e 的缺陷。
因此,您可以做的是定义一个命令,比如\TOCnewline
在正文中给出一个定义,这样它在排版时除了产生一个空格外什么也不做,但在写入文件时.toc
会保留而不发生任何变化。我们可以通过使其成为一个“健壮”的命令(不会在 中展开\write
)来做到这一点:
\DeclareRobustCommand\TOCnewline[1][]{\unskip\space\ignorespaces}
此定义接受一个可选参数,但会忽略它。它会产生一个空格,并删除前后各一个空格。在 TOC 处理期间,我们为其赋予了不同的定义:简单地说\\
。因此,如果我们将所有内容放在一起,整个内容看起来如下所示:
\documentclass{article}
\pagestyle{headings}
\begin{document}
\newcommand\TOCnewline[1][0pt]{\\[#1]}
\tableofcontents
\DeclareRobustCommand\TOCnewline[1][]{\unskip\space\ignorespaces}
\newpage % to see a running header other than "CONTENTS"
\section{A test with\TOCnewline three lines
\TOCnewline[10pt] and here with extra space}
some text
\end{document}
不是很优雅,但是可以做到 :-) ...但显然在 LaTeX3 中可以做得更好。
这是第 1 页的输出:
... 和 2:
警告:直接使用\\
不会出现错误消息,但它会产生错误的间距,因为它会产生断线惩罚(通常在运行标题中被忽略)并且\hfil
不会忽略。如果该类支持多行运行标题,那么它也会在运行标题中产生断线。
答案2
\hyphenation
您可以使用序言中的命令指定连字符。
答案3
在你的标题中你需要给出\raggedright
它会自动分解这个词:
\newcommand\section{\@startsection {section}{1}{\z@}%
{-3.5ex \@plus -1ex \@minus -.2ex}%
{2.3ex \@plus.2ex}%
{\normalfont\Large\bfseries\raggedright}}
答案4
我发现\\
并且适当(通过眼睛)\hspace{}
很有用。