将 lefthyphenmin 应用于带连字符的单词部分

将 lefthyphenmin 应用于带连字符的单词部分

在德语中,有些单词的单个字母之间用连字符隔开,例如“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

正如您使用的那样babelluatex您可以使用\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}

在此处输入图片描述

相关内容