章节标题、连字符、手动换行 - 以及如何避免它们

章节标题、连字符、手动换行 - 以及如何避免它们

我的文档中有几个章节标题带有连字符,这很难看。

我现在正在寻找某种方法来避免连字符,这与这个问题,但不幸的是我的标题必须居中(所以raggedright不是一个选项),并且添加\sloppy到我的titlesec小节格式的定义并没有帮助:

\newcommand{\trailthesubsection}[1]{\MakeUppercase{#1} (\thesubsection)}
\titleformat{\subsection}
    {\normalfont\fontsize{15pt}{16pt}\bfseries\sffamily\sloppy} % <- "sloppy" didn't help.
    {}
    {0pt}
    {\filcenter\trailthesubsection}

可以当然,设置手动换行符 - 但为了不是为了在此过程中破坏我的目录布局,我必须对部分命令使用可选参数:

\subsection[Could do this but it is not nice]{Could do this\\ but it is not nice}

是否有某种方法可以抑制给定文本的连字符(例如通过中的某些命令\titleformat),或者抑制目录中手动设置的换行符?

答案1

这个问题在 TeX FAQ 中讨论了关闭连字的四种不同方法。方法三和方法四包括添加指令

\righthyphenmin62 %% or whatever's large enough ...

\hyphenchar\font=-1

后一种方法用于以下 MWE:

\documentclass{article}
\usepackage{titlesec}
\titleformat*{\section}{\sloppy\bfseries\Large\hyphenchar\font=-1}
\begin{document}
\section{Supercalifragilisticexpialidocious 
   Supercalifragilisticexpialidocious 
   Supercalifragilisticexpialidocious Supercalifragilisticexpialidocious 
   Supercalifragilisticexpialidocious Supercalifragilisticexpialidocious 
   Supercalifragilisticexpialidocious Supercalifragilisticexpialidocious }
 
\ldots with apologies to Julie Andrews.
\end{document}

请注意,该\sloppy命令将阻止 TeX 在章节标题中创建(严重的!)过满的行。

笔记(感谢 egreg):该\hyphenchar\font-1指令是全局的,因此全部 文档中的其他文本\bfseries\Large也会被抑制连字符——这可能是(也可能不是)想要的。因此,\righthyphenmin62使用这种方法可能稍微安全一些(双关语)。但是,根据前面提到的 TeX FAQ 的答案,如果您是用户,则babel重置 \left- 和/或 \righthyphenmin 宏的方法将不起作用,因为babel会在内部重置它们。

附录:为了防止在可选的缩短章节标题(显示在目录中)中使用连字符,必须插入说明

\protect{\hyphenchar\font=-1}\protect\sloppy

在命令的可选参数中,在材料的开头\section。(我的感觉是,如果某个部分的标题超过一行,那么提供一个缩短的标题可能是明智的,这个标题要足够短,根本不需要换行。)

答案2

工作方式之一是

\newif\ifintoc
\DeclareRobustCommand{\titlebreak}{%
  \ifintoc
    \unskip\space
  \else
    \newline
  \fi}

然后通过

\begingroup\intoctrue
\tableofcontents
\endgroup

并且您的标题可以输入为

\subsection{Could do this\titlebreak but it is not nice}

也可以注入\intoctrue代码\tableofcontents

LaTeX 会\titlebreak.toc文件中写入,但当读入这个文件时,\titlebreak它将意味着“保留一个正常空格”。在文档的正常处理过程中,它将意味着“在此处换行”。这\unskip\space是为了防止在

 \subsection{Could do this \titlebreak but it is not nice}

或没有空格

 \subsection{Could do this\titlebreak but it is not nice}

相关内容