babel 简写 "| 在宏中不起作用

babel 简写 "| 在宏中不起作用

babel带有选项的包ngerman(以及大多数其他语言,但没有english)提供了简写"|,它可以防止在给定位置出现连字(参见babel文档例如,Auf"|lage将导致单词授衔没有 fl 连字(这是需要的,因为在德语中,你不希望连字跨越词素边界)。

但是,当将其放入宏中时,"|它就不再起作用了。这是为什么?我该如何避免这种情况?

\documentclass{article}

%\usepackage[T1]{fontenc}% doesn't help
\usepackage[ngerman]{babel}

\newcommand{\foo}{"|}

\begin{document}

ff

f"|f

f\foo f

\end{document}

上述代码的输出

答案1

如果在定义命令之前打开简写,或者\begin{document}在简写激活之后定义命令,则它可以工作。

正如约瑟夫所评论的,建议之后立即将其关闭,以便活动的速记不会影响其他命令。

\documentclass{article}
\usepackage[ngerman]{babel}
\shorthandon{"}
\newcommand{\foo}{"|}
\shorthandoff{"}
\begin{document}
ff

f"|f

f\foo f
\end{document}

示例输出

或者,您可以在宏定义中本地打开它,类似于如下代码这里\chapter由 egreg 编写,并变得更加强大,因此它可以在移动参数(例如标题和说明)中使用\section

\DeclareRobustCommand{\foo}{\shorthandon{"}\scantokens{"|\endinput}}

但是,像第一个解决方案一样,在序言中有一个可以使用简写的部分可能会很有用,这样您就可以在命令中使用它们,例如在宏的文本参数中。

相关内容