取消定义/重新定义 expl3 中已定义的命令

取消定义/重新定义 expl3 中已定义的命令

我不确定论坛关于何时提出新问题以及何时将其与现有问题合并的协议,因此如果这是不合常规的,我深表歉意。这个问题源于! 使用 \seq_map_pairwise_function:ccN 时缺少 \endcsname 插入错误。我才刚刚开始探索expl3-style 编码,还远不是 TeX 专家,尽管我已经用其他语言(显然不是排版语言)编码多年。但整个 token/输入流方法对我来说是一个全新的范例,我正在努力理解它。文档在网络上广泛传播,TeX 书籍很少,而且越来越难找到(实际上,我在大约十年前就购买了 Knuth 的 5 卷套装和 Bechtolsheim 的 4 卷套装,那时我还没有认真考虑这个问题,它们目前存放在约 1000 英里外的地方),因此,我的大部分学习都是通过示例、反复试验和在这里提问来完成的。所以请耐心等待。

上述参考中的代码在没有no-math将选项传递给 的情况下存在问题fontspec。具体来说,它存在一个问题,即常见的大写希腊字母已被 定义fontspec。现在,包括该no-math选项确实解决了这个问题,但我更感兴趣的是为什么会发生这种情况,以及为什么显然没有办法取消定义或重新定义 中的命令expl3。或者也许这是可能的,我只是还没有发现如何。因此,除了提供示例之外,这组特定的问题与上述参考无关。

\cs_undefine如果不取消定义控制序列,它会做什么?它的语法是什么?\Gamma例如,无论我使用:N:c\Gamma{\Gamma}或,我似乎都无法让它与 一起工作{Gamma}。 同样的情况也是如此\cs_meaning,我认为这可能有助于故障排除。 我一定是错过了一些基本的东西。 我确信这可以用纯 TeX 来完成,但我从阅读的内容中得到的印象是,混合这两者类似于将一个自修改的汇编例程放入 C# UX 应用程序中。 假设,关于这个具体案例,如果我可以不是使用no-math选项,并且大写希腊字母已经定义,我该如何解决这个问题?更一般地说,如何重新定义已经用 定义的命令expl3?我可能甚至没有问正确的问题,但我希望有人能够看到我未能理解的地方并引导我朝着正确的方向前进。

答案1

expl3该消息与你完全无关

\documentclass{article}
\usepackage
%[no-math]
{fontspec}

\def\Gamma{wibble}
\begin{document}

\end{document}

产生

! LaTeX Error: Command `\Gamma' already defined.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...                                              
                                                  
l.7 \begin{document}
                  
?

就像\begin{document} fontspec尝试调整一些设置,使用 latex2e 声明检查命令是否是新的。

no-math告诉包不要这样做。

相关内容