防止对特定的短的、重复的、带连字符的单词进行连字符连接

防止对特定的短的、重复的、带连字符的单词进行连字符连接

我正在写一份文档,其中我经常提到一些实验案例,这些案例被称为“M-1”和“P-2”。它们总是一个数字、一个连字符和一个数字。在几个地方,我发现这些案例名称被分成两行,第一行是数字和连字符,第二行是数字。除了每次都使用或\mbox之外,有没有办法告诉文档不要将这些单词分成两行?\nobreakdash

我希望能够全局定义某些东西,例如命令的反义词\hyphenation,专门针对这些案例名称(共有 7 个)。我更希望避免更改会影响文档中其他单词的设置,例如\exhyphenpenalty=10000

如果使用\mbox或是\nobreakdash最好的选择,那么两者之间有什么区别?

按照 Dan 和 David 的建议,我尝试设置

\renewcommand{\P}{P\nobreakdash}

(其他案例也一样,除了 M,它使用了\newcommand)这样我仍然可以在文本中使用文本 P-1 进行搜索。在文档文本中,它工作正常。但是,有时我会在图片标题中命名案例,而文档必须包含图片列表。案例名称在图片标题中显示正常,但在图片列表中,我收到缺少控制序列的错误。标题为:

\caption[For case P-1.]{For case P-1, more words.}

lof 输出文件内容为

\contentsline {figure}{\numberline {4.1}{\ignorespaces For case P\unhbox \voidb@x \toks@ \@emptytoks \def 1{\toks@ {--}\futurelet \@let@token \setbox \z@ \hbox {-\penalty \@M }\unhbox \z@ }\def \setbox \z@ \hbox {-\penalty \@M }\unhbox \z@ {\setbox \z@ \hbox {-\penalty \@M }\unhbox \z@ }\futurelet \@let@token \setbox \z@ \hbox {-\penalty \@M }\unhbox \z@ -1.}}{64}{figure.caption.62}

文档的文本显示“对于案例 P------1”(第一个连字符有时是长度相同的不同字符,但灰色且略低,有时是常规连字符)。除 L 案例外,所有案例都发生这种情况。所有这些都发生在图表列表中此错误之前。虽然我尝试将导致此错误的 P-1 引用之一更改为 L-1,但该标题的错误消失了。

答案1

P-1如果您想避免在明确的连字符处换行,那么您在文本中就不能真正拥有自由。

您可以按照评论中的建议来(重新)定义和\P,但我不建议这样做,而是更喜欢使用前缀:\M\S

\usepackage{amsmath} % for \nobreakdash
\DeclareRobustCommand{\hM}{M\nobreakdash}
\DeclareRobustCommand{\hP}{P\nobreakdash}
\DeclareRobustCommand{\hS}{S\nobreakdash}

请注意,它\nobreakdash不会单独打印连字符,并且它后面必须跟一个、两个或三个-字符,分别表示“连字符”、“en-dash”和“em-dash”。这样就P-1可以在 LaTeX 代码中进行搜索。

下面的测试表明这些宏不会导致连字符处的换行。

\documentclass{article}
\usepackage{amsmath} % for \nobreakdash
\DeclareRobustCommand{\hM}{M\nobreakdash}
\DeclareRobustCommand{\hP}{P\nobreakdash}
\DeclareRobustCommand{\hS}{S\nobreakdash}

\begin{document}
\parbox{0pt}{
\hspace{0pt}%
\hM-1 \hP-2 \hS-3

\hspace{0pt}%
\hM--1 \hP--2 \hS--3

\bigskip

\mbox{Compare}

\hspace{0pt}%
M-1 P-2 S-3

\hspace{0pt}%
M--1 P--2 S--3
}
\end{document}

这些\hspace{0pt}位仅允许 TeX 在段落的第一个单词上尝试连字。在\parbox零宽度的段落中,将在所有可行的位置强制使用连字。

在此处输入图片描述

答案2

您可以使用\mbox{}它来实现这个目的。您可能想要定义一个或多个命令来使用它(\def\newcommand)。

请参阅以下示例:

\documentclass[14pt]{article}

\usepackage[english]{babel}
\usepackage[a6paper]{geometry} % demo only

\begin{document}

\noindent
question question question question question M-3 question question question question

\noindent
question question question question question M-3 question question question question

\noindent
question question question question question \mbox{M-3} question question question question

\noindent
question question question question question M-3 question question question question

\end{document}

PS:如果单词不包含破折号或数字,您可能已经定义了一个\hyphenation{}没有真正连字符的可能性。

PS:你可以看看其他一些方法这里

相关内容