在德语中,有些单词的单个字母之间用连字符隔开,例如“E-Ink-Display”、“E-Auto”(电动车)、“E-Mail”、“x-Achse”(x 轴)等等。使用连字符连接这些单词时,单个字母不能分开。
有没有办法(也许使用\lefthyphenmin
)来全局应用此规则,而不必\nobreakdash
每次使用这样的词时都使用或类似的?
梅威瑟:
\documentclass{article}
\usepackage{showframe}
\usepackage[american,ngerman,shorthands=off]{babel}
\usepackage{amsmath}
\begin{document}
xxxxx xxxxx xxxxxxxxx xxxx xxxx xxx xxxxx xxxxxxxx xxxxxx xxxxx E-Auto
should look like this:
xxxxx xxxxx xxxxxxxxx xxxx xxxx xxx xxxxx xxxxxxxx xxxxxx xxxxx E\nobreakdash-Auto
\end{document}
答案1
正如您使用的那样babel
,luatex
您可以使用\babelposthyphenation
:
\usepackage[american,ngerman,shorthands=off]{babel}
\babelposthyphenation{ngerman}{ ^().=() }
{ {},
{ pre=-, no=-, penalty=10000 }
}
看使用 luatex 进行非标准连字符连接了解更多信息。在这里我使用技巧来限制捕获,因为^
(单词开头)必须在外面。它适用于或多或少直的文本(例如,单词中间没有什么)。
.
是任何字符并且=
是显式连字符。也许可以对模式进行微调,“任何字符”不是最佳选择,但它可以用字符列表替换。
编辑。这是一个更好的模式:
\babelposthyphenation{ngerman}{ ^{A}*(){a}=() }
我们考虑前导字符或{A}*
的可能性,因为表示“非字母”(与 lua 中相同)。此部分放在要处理的部分之前,包含在 之间。(
“
{A}
%A
() ()
答案2
由于您使用 LuaLaTeX,因此您可以 (a) 设置一个 Lua 函数,将所有实例替换为<single alphabetical character>-<letter character(s)>
,<single alphabetical character>\nobreakdash-<letter character(s)>
然后 (b) 将函数分配给 LuaTeX 的process_input_buffer
回调。这样,它将充当输入代码的预处理器,前TeX 开始其常规处理。
(上图的框线是由该showframe
包绘制的。)
\documentclass{article}
\usepackage{showframe}
\usepackage[american,ngerman,shorthands=off]{babel}
\usepackage{amsmath} % for "\nobreakdash" macro
\usepackage{luacode} % for 'luacode' environment
\begin{luacode}
function nbdash ( s )
return ( s:gsub ( "(%A%a)%-(%a+)" , "%1\\nobreakdash-%2" ) )
end
luatexbase.add_to_callback ( "process_input_buffer" , nbdash , "nbdash" )
\end{luacode}
\begin{document}
xxxxx xxxxx xxxxxxxxx xxxx xxxx xxx xxxxx xxxxxxxx xxxxxx xxxxx E-Auto
xxxxx xxxxx xxxxxxxxx xxxx xxxx xxx xxxxx xxxxxxxx xxxxxx xxxxx x-Achse
\end{document}
答案3
使用 U+2011 不间断连字符
\documentclass{article}
\usepackage{showframe}
\usepackage[american,ngerman,shorthands=off]{babel}
\usepackage{amsmath}
\begin{document}
xxxxx xxxxx xxxxxxxxx xxxx xxxx xxx xxxxx xxxxxxxx xxxxxx xxxxx E^^^^2011Auto
xxxxx xxxxx xxxxxxxxx xxxx xxxx xxx xxxxx xxxxxxxx xxxxxx xxxxx E‑Auto
should look like this:
xxxxx xxxxx xxxxxxxxx xxxx xxxx xxx xxxxx xxxxxxxx xxxxxx xxxxx E\nobreakdash-Auto
\end{document}