允许连字符的不间断破折号

允许连字符的不间断破折号

babel包提供了有用的破折号变体,例如,"~禁止在部分中使用连字符的非中断破折号,以及"=允许在部分中使用连字符的中断破折号。

然而,像

$x$-Koordinaten

不太合适;我们不想让破折号断裂,但我们希望允许使用连字符“Koordinaten”。当然,

$x$"~Ko\-or\-di\-na\-ten

可以工作但必须在本地指定,而我们也不想这样做(倾向于全局\hyphenation{...}设置)。

是否有可能以不强迫我们在本地指定连字符的形式实现上述目标?

答案1

在此处输入图片描述

如果还没有快捷方式,您可以按照下面的方法操作,或者更好的方法,正如 egreg 在评论中指出的那样

\makeatletter
 \defineshorthand[ngerman]{"/}{\mbox{-}\bbl@allowhyphens}
\makeatother

然后使用"/

\documentclass{article}
\usepackage[german]{babel}

\setlength\textwidth{5cm}
\newcommand\zz{-\nolinebreak\hspace{0pt}}
\begin{document}


\noindent X\dotfill X


aaaa aaaa aa $x$-Koordinaten

aaaa aaaa aaa $x$-Koordinaten

aaaa aaaa aaaa $x$-Koordinaten

aaaa aaaa aaaaa $x$-Koordinaten

===

aaaa aaaa aa $x$\zz Koordinaten

aaaa aaaa aaa $x$\zz Koordinaten

aaaa aaaa aaaa $x$\zz Koordinaten

aaaa aaaa aaaaa $x$\zz Koordinaten


\end{document}

答案2

这是直接来自软件包用户指南的解决方案amsmath。(要使其工作,amsmath必须加载软件包。)

$x$\nobreakdash-\hspace{0pt}Koordinaten

如果你发现自己经常输入这个序列,你可能需要创建一个类似下面的宏:

\newcommand{\nbdx}{$x$\nobreakdash-\hspace{0pt}} % "no-break dash with x"

并输入\nbdx Koordinaten正文。

答案3

总结

\newunicodechar{‑}{{\fontencoding{T1}\selectfont\symbol{'177}}\nolinebreak\hspace{0pt}}

然后,只需在右括号前使用 ‑ (U+2011) 代替 - (U+002D)。这意味着您现在可以写(re‑)creation(Web‑)Frameworks甚至Entwicklungs‑, Test/QS‑, Staging‑ oder Produktivsystem(是的,我让破折号逗号正常工作了)。

如果这对你不起作用,@dessert 报告说,这个和德米特里的回答作品:

\newunicodechar{‑}{\babelhyphen{nobreak}}

使用哪一个似乎取决于您使用的版本babel以及如何使用它。

背景故事

我也在寻找这个,但作为一个更通用的解决方案,到目前为止,我找到的答案都不能让我满意。我确实有德语 Babel 包,但"~只是为我排版了一个双引号,后跟一个空格(事实上,我认为我更喜欢将双引号呈现为引号字符)。

我查看了 Unicode,发现 ‑U+2011 NON-BREAKING HYPHEN似乎是我想要的。显然,Xe(La)TeX 已经支持此功能,但我们使用 pdflatex(在一个项目中直接使用,在另一个项目中通过 maven-latex-plugin 使用),因此无法使用。

但这为我指明了正确的方向:我已经知道\newunicodechar所以我想我可以让 U+2011 可用。我的第一次尝试是……

% does not work
\newunicodechar{‑}{-}

… 只是将其定义为连字符,但这样不行。所以,在阅读了这里的一些答案后,我尝试了…

% throws an error message
\newunicodechar{‑}{\nobreakdash-\hspace{0pt}}

…但\nobreakdash显然还不知道。最后,我尝试了…

% works for me, except commas
\newunicodechar{‑}{-\nolinebreak\hspace{0pt}}

…然后,我就可以排版“(Maschinen‑)Benutzernamen”了,没有难看的分隔线自动连字符将其变成“(Maschinen-)Benut-⏎zernamen”,这真是太完美了。更棒的是,从 PDF 复制/粘贴时,您会得到一个实际的 - ,这使得获取(用于 XML 注释)U+002D HYPHEN-MINUS之类的操作可以正常工作。\texttt{<!‑‑}<!--

更新 2016-09-04:逗号

但有一个问题:‑,仍然会把多余的逗号推到下一行。解释与我们在宏扩展中仍然使用 ASCII 连字符减号有关-,Teχ(无用)为其添加了一个自由裁量断点。但是,如果当前字体具有 T1 编码(而不仅仅是 OT1 或 LY1),则可以解决这个问题,方法是暂时切换到当前字体的 T1 编码变体并输出命名字符 127(0x7F),这与标准 \hyphenchar 45(0x2D)完全相同。

% works for me
\newunicodechar{‑}{{\fontencoding{T1}\selectfont\symbol{'177}}\nolinebreak\hspace{0pt}}

对于我使用的(自定义 TrueType)字体,这需要一些黑客行为由于ttf2tfm 错误;如果您只是想确保字体的 T1 编码在正确的位置具有正确的字形,请使用以下命令(并替换museo为您的字体名称):

\documentclass{article}
\usepackage{fonttable}
\usepackage[T1]{fontenc}

\begin{document}
\thispagestyle{empty}
\pagestyle{empty}
\xfonttable{T1}{museo}{m}{n}
\end{document}

(注:我把我对几个问题的回答合并在这个答案然后将其复制到这些其他问题中,所以不要奇怪它是否出现在三个地方。)

相关内容