假设我们有一些数学对象,既用于公式,也用于“自然”语言(在我的例子中是复杂性类)。当为这样的对象定义宏时,我喜欢使用,\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}