babel 次要语言因简写而导致冲突

babel 次要语言因简写而导致冲突

为什么次要的 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}

在此处输入图片描述

相关内容