为什么次要的 Babel 语言会使其简写字符处于活动状态?有没有办法让它们只在其语言中处于活动状态,而不是让它们处于输出自身的活动字符,以避免冲突?
在以下 MWE 中,添加german
为次要语言(不激活它)休息文档,因为快捷键字符"
被激活,并且因为我的定义\code
是个坏主意(但很难修复*)。我可以使用shorthands=off
,但德语中没有快捷键。
\documentclass[varwidth,border=1pt]{standalone}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[ngerman,main=english]{babel}
\usepackage{listings}
\newcommand{\code}[1]{%
\lstinline[basicstyle=\ttfamily]^#1^}
\begin{document}
The " character is active: \verb!\the\catcode`"! = \the\catcode`" .
But shortcuts are not actually active: "s.
\\
\shorthandoff{"}
I must disable shortcuts to ensure that " is not active: \verb!\the\catcode`"! =
\the\catcode`" .
So I can use the \verb!\code! command: \code{"bar" + str1}.
\\
\shorthandon{"}
\begin{otherlanguage}{ngerman}
Text with German shortcuts: "s.
\end{otherlanguage}
\shorthandoff{"}
\end{document}
*IIUC 修复滥用问题会迫使我改变的语法\code
,而这将需要使用更改数十页\code
。
答案1
您的 定义\code
是错误的:只需避免抓住参数即可。这样,您就可以充分利用 的功能\lstinline
,因此请输入 或\code{<tokens>}
(\code|<tokens>|
其中|
是 中未出现的任何字符<tokens>
)。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[ngerman,main=english]{babel}
\usepackage{listings}
\newcommand{\code}{\lstinline[basicstyle=\ttfamily]}
\begin{document}
The " character is active: \verb!\the\catcode`"! = \the\catcode`" .
But shortcuts are not actually active: "s.
So I can use the \verb!\code! command: \code{"bar" + str1}.
\begin{otherlanguage}{ngerman}
Text with German shortcuts: "s.
\end{otherlanguage}
\end{document}