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