我想在文章的标题页上插入一个包含关键词的段落。出于索引目的(例如网络搜索引擎),我希望关键词不带连字符(当然是暂时的)。同时,段落两侧应对齐,即使单词间距可能比平时大。
我怎样才能实现这个目标?
答案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 命令,因此无需在序言中包含任何包即可工作。