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