Babel 的问题

Babel 的问题

我无法理解 babel 在以下示例中的工作方式(或者更准确地说,不工作)。命令 \sujet 应该创建一个名为 \sujeti 的新命令,而该命令又应该打印 \sujet 的第 4 个参数。

这似乎确实如此除了1)标点符号(感谢 babel 的支持,应该是法语)是错误的('!' 之前没有空格);2)无法在 \sujet 的内容中使用 \verb 命令。

这是一个简单的例子:

\documentclass{article}

\RequirePackage[utf8]{inputenc}
\RequirePackage[T1]{fontenc}

\RequirePackage[french]{babel}

\newcommand\addindex[4][]{% #2 as name of var, #3 as index and #4 as content
  \csname#1def\expandafter\endcsname\csname #2\roman{#3}\endcsname{#4}%
}

\newcounter{num_sujet}

\newcommand{\sujet}[1]{%
    \stepcounter{num_sujet}
    \addindex{sujet}{num_sujet}{#1\par} 
    \par   
}

\sujet{%
    Test! %\verb/there should be a space before '!', and \verb doesn't seem to work/
}

\begin{document}
    \sujeti
\end{document}

对于正在发生的事情,任何帮助或解释都非常受欢迎。

答案1

软件包babel不会在前言中激活其简写,以防止干扰其他软件包的加载。宏\shorthandonshorthandoff可以激活和停用前言中文本的简写。以下示例简化了原始 MWE,以更清楚地说明这一点:

\documentclass{article}

\RequirePackage[utf8]{inputenc}
\RequirePackage[T1]{fontenc}

\RequirePackage[french]{babel}

\newcommand{\sujet}[1]{%
    \def\sujeti{#1}%
}

\shorthandon{!}
\sujet{Test!}
\shorthandoff{!}

\begin{document}
    \sujeti
\end{document}

结果

相关内容