无法访问的数学模式

无法访问的数学模式

我的问题与“无法访问”有关。我已经搜索过了,但发现几乎没有信息可以帮助我。我的代码对于 MWE 来说太长太复杂了,所以我必须自己去寻找。因此,我寻求指导,看看在哪里可以找到。

该错误与数学模式的入口有关。一旦遇到$,编译就会停止,并指出$无法访问。如果我改用,也会发生这种\(情况。无论后面是什么$。甚至在文档主体中遇到$ $第一个时也会抛出错误。$

我使用的是带有 fontspec 的 lualatex 2017,但错误不是由未使用我的代码的测试文档产生的。因此,错误肯定出在我自己的代码中。此外,如果我在使用自己的代码时避免使用数学模式,则不会产生任何错误。所以,这限制了可能性。我没有任何专门针对数学模式的宏。

我检查了一下,就在 之前$, 的 catcode$是 3,正如预期的那样。我还询问了一下,\show$它告诉我这是数学模式转换,正如预期的那样。

根据 TeX 错误消息,以及此处的先前问题,inacessible当代码包含错误语法(例如,\def{somecommand}{something}而不是正确的)时,可能会抛出\def\somecommand{something}。我已经检查了我的代码,没有这样的错误。日志文件没有说明我的情况。

那么,还有哪些其他因素可能导致inaccessible消息?考虑到某些可能性,我将不得不自己寻找答案。我希望我提出的这个问题能够引起大家的兴趣。

进一步编辑:之前,我在这里保存了日志文件的一部分,但它太过局部,不会引起普遍关注。相关部分涉及数学模式字体定义方式的错误。错误总是潜伏着,但直到进入数学模式才会抛出。导致错误的是我自己对字体相关代码的操作,这种方式对普通文本模式无害。

我接受了 David 的回答,因为他的回复(在聊天中继续)帮助我将问题缩小到代码的某个特定部分。Barbara 的回答也很有帮助。当我删掉那段代码时,数学模式就可以工作了。现在,我要做的就是找出原因。原因并不完全是上述那个(错误使用\def),而是与我自己对命令的重新定义有关。有很多方法可以弄乱重新定义,这些方法在本论坛的许多其他问题中都有充分讨论。其中的可能性包括\let在应该是的时候使用\LetLtxMacro,或者重新定义最初在 ExplSyntax 中的命令以使其不再使用该语法。

指导要点:错误使用\def(或\edef诸如此类)并不是弄错宏定义的唯一方法。

最终(?) 编辑:问题解决了!在我的代码中,我这样做了:\let\textfont\rmfamily\relax。那是旧代码,我忘了为什么这样做(没有实际用途)。所以我摆脱了它,现在一切都好了。事实证明\textfontN(其中 N 是一个数字)被字体加载器使用。所以,我的代码破坏了字体加载器,而这恰好捕获了加载数学字体的部分。错误仅在进入数学模式时出现,因为那是调用错误定义字体的唯一位置。如果错误是在序言期间由字体加载器直接抛出的,我就会发现它。

答案1

如果每次数学运算都插入一个不可访问的控制序列,那么在经典 tex 中,你几乎肯定会得到类似的东西

\everymath{\def z{}}


blah $x$

\bye

产生

! Missing control sequence inserted.
<inserted text> 
                \inaccessible 
<to be read again> 
                   z
<everymath> \def z
                  {}
<to be read again> 
                   x
l.6 blah $x
           $
? 

您可以在 luatex 中执行相同的操作,但在 luatex 中,可以通过 Lua 回调而不是通过寄存器插入错误生成代码\everymath


自从发布这个答案以来,日志就被添加到问题中,并且它证实了这基本上就是发生的事情。

LaTeX 加载数学字体(每个字体大小第一次使用数学),\everymath并且由于各种原因,它以在显示命令名称时不使用反斜杠的模式处理字体加载代码。

由于某种原因(从显示的日志片段中看不清楚),部分内容\math@fonts似乎被错误地双重扩展了,因此下次执行时,而不是

\def\encoding{TU}

确实如此

\def TU{TU}

因为 \encoding 已经扩展

所以\def看到T并且......

答案2

大卫的评论和回答给了我一个想法。

尝试使用任意口味的乳胶:

\documentclass{article}
\newcommand{z}{xxx}
\begin{document}
xxx
\end{document}

我明白

! Missing control sequence inserted.
<inserted text> 
                \inaccessible 
l.2 \newcommand{z}{xxx}

这意味着您可能试图定义一个没有初始反斜杠的命令。当然还有其他可能性,但这应该是相对容易找到的。

相关内容