我无法理解 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
不会在前言中激活其简写,以防止干扰其他软件包的加载。宏\shorthandon
和shorthandoff
可以激活和停用前言中文本的简写。以下示例简化了原始 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}