将 Babel 中的破折号与 xspace 结合起来

将 Babel 中的破折号与 xspace 结合起来

假设我们有一些数学对象,既用于公式,也用于“自然”语言(在我的例子中是复杂性类)。当为这样的对象定义宏时,我喜欢使用,\xspace这样间距在任何情况下都能按预期工作。

这对我来说一直很好,直到我发现 ; 的良好连字控制功能似乎与这些相冲突babel\xspace

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{xspace}

\newcommand{\NP}{\ensuremath{\mathsf{NP}}\xspace}

\begin{document}
  $L \in \NP$, daher foo.\\
  $L$ ist in \NP. \\
  $L$ ist \NP"=vollständig.
\end{document}

与 的组合"=——意味着在这种情况下需要断开/连字符——会导致明显错误的结果:

在此处输入图片描述

注意我可能用得太多了\xspace,但我不知道还有其他方法。我该如何解决这个问题?

答案1

xspace检查下一个标记以决定是否设置或隐藏空格。可以通过添加用于省略空格的新识别标记\xspaceaddexceptions。下一个标记被扩展,并且每个扩展步骤都被检查。这可以用于"=由两个标记组成的标记。在某些扩展步骤中,它扩展为一个标记\ngerman@sh@"@=

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{xspace}[2004/12/07]

\expandafter\xspaceaddexceptions\expandafter{%
  \csname ngerman@sh@"@=@\endcsname
}

\newcommand{\NP}{\ensuremath{\mathsf{NP}}\xspace}

\begin{document}
  \noindent
  $L \in \NP$, daher foo.\\
  $L$ ist in \NP. \\
  $L$ ist \NP"=vollständig.
\end{document}

结果

相关内容