暂时禁止连字

暂时禁止连字

我想在文章的标题页上插入一个包含关键词的段落。出于索引目的(例如网络搜索引擎),我希望关键词不带连字符(当然是暂时的)。同时,段落两侧应对齐,即使单词间距可能比平时大。

我怎样才能实现这个目标?

答案1

\begin{sloppypar}...\end{sloppypar}当文本没有连字符时,将其放入是有意义的。

\listfiles
\documentclass[ngerman]{article}
\usepackage{libertine}
\usepackage{babel}
\usepackage{blindtext}
\textwidth=10cm
\begin{document}
\blindtext

\foreignlanguage{nohyphenation}{\begin{sloppypar}\blindtext\end{sloppypar}}

\blindtext
\end{document}

在此处输入图片描述

答案2

可以通过不同的方式禁用连字。一种方法是设置

\hyphenpenalty=10000
\exhyphenpenalty=10000

分别为自由选择连字符和显式连字符分配“无限”成本。

另一种方法是选择一种没有连字符模式的语言,这种方法更有效率,因为它可以使 TeX 免受计算缺陷的影响。

所有现代 TeX 发行版都已在其预定义集中包含这样一种语言,它被称为nohyphenation。如果你正在使用babel,那么

\begin{hyphenrules}{nohyphenation}
<text>
\end{hyphenrules}

只允许在显式连字符处换行。如果您还想禁用它们,则\exhyphenpenalty=10000仍需要设置。但是,必须处理段落设置,允许更大的单词间空间,而不需要太多Underfull \hbox消息,这可以通过说 来实现\sloppy

一个“完整”的解决方案可能是定义一个nohyphens环境,以便可以输入

\begin{nohyphens}
Text not to be hyphenated
\end{nohyphens}

按照以下方式

\makeatletter
\@ifpackageloaded{babel}
  {\newenvironment{nohyphens}
     {\par\sloppy\exhyphenpenalty=\@M
      \@ifundefined{l@nohyphenation}
        {\language=\@cclv}
        {\hyphenrules{nohyphenation}}%
     }
     {\par
      \@ifundefined{l@nohyphenation}
        {}
        {\endhyphenrules}%
     }
  }
  {\newenvironment{nohyphens}
     {\par\sloppy\exhyphenpenalty=\@M
      \@ifundefined{l@nohyphenation}
        {\language=\@cclv}
        {\language=\l@nohyphenation}%
     }
     {\par}
  }
\makeatother

如果babel已加载,我们将使用它的功能,否则我们只需将当前语言设置为“无连字符”语言(如果存在);在最坏的情况下,我们将语言编号设置为 255,这不应该被定义(TeX 格式通常为启用的语言分配渐进的数字,而拥有 256 个数字的可能性极小)。

请注意,分配\language=-1并不是解决方案:TeXbook 在第 455 页说,

如果\language为负数或大于 255,则 TeX 会认为\language = 0

答案3

你可以让连字符变得无限昂贵

  \hyphenpenalty=10000

或者使用未加载任何连字模式的语言

  \newlanguage\nohy
  \language=\nohy

然后您可能需要使用\sloppy\begin{sloppypar}...\end{sloppypar}使单词间距比平时延伸得更大。

答案4

可以使用以下方法排除个别单词的连字符\mbox{} 命令。这也适用于日期或多个单词。例如:

The following word will not hyphenate: \mbox{keywordnottohyphenate}. Neither will the following date: \mbox{2020-08-23}

\mbox 是标准的 LaTeX 命令,因此无需在序言中包含任何包即可工作。

相关内容