Tikz + breqn:编译永远不会以 |-Symbol 结束

Tikz + breqn:编译永远不会以 |-Symbol 结束

我刚刚在 tikz 中发生了一个奇怪的错误。以下 MWE 在我的计算机上从未完成(MikTeX,breqn 版本 0.98e,tikz 版本 3.0.1a):

\documentclass[11pt,a4paper]{article}
\usepackage{tikz}
\usepackage{breqn}
\begin{document}
    Some text
    \begin{tikzpicture}
        \draw (0,0) node {$|x|$};
    \end{tikzpicture}
\end{document}

问题:

  • 为什么会发生这种情况?(或者这只是我的配置?)
  • 我该如何避免这种情况?\|工作正常,但会导致双线,这不是我想要的。

当然我可以直接删除breqn(然后就可以正常编译了),但是由于我经常在我的文档中使用它,所以我想避免这样做。

这是生成的日志文件的结尾:

\eq@hshift=\dimen204
\eq@given@sidespace=\dimen205
\mathindent=\dimen206
\eq@final@linecount=\count144
\eq@wdR=\dimen207
\EQ@continue=\toks29
\lr@level=\count145
\GRP@queue=\toks30
\c@parentequation=\count146
\GRP@box=\box56
\GRP@wholebox=\box57
\darraycolsep=\skip58
\cur@row=\count147
\cur@col=\co

答案1

随着breqn数学|变得活跃,这意味着它在数学模式下被视为宏。

然而,tikz也掌握了主动权,并在内部tikzpicture重新定义了主动|,本质上是非\tikz@nonactivebar主动|;但|数学活跃并且我们处于数学模式,因此它再次充当活动字符,这意味着\tikz@nonactivebar……

无限循环,抱歉。

amsmath您可以通过加载并使用\lvert x\rvert代替|x|(顺便说一句,这在概念上更好)来解决特定问题。可能还有其他字符会导致此问题。

对于没有可用别名的字符,有一种(未经广泛测试的)解决方法,例如|

\documentclass[11pt,a4paper]{article}
\usepackage{tikz}
\usepackage{breqn}

\makeatletter
\newcommand{\aliasmathchar}[2]{%
  \begingroup
  \def\@sym##1##2##3##4{"##2##3##4}%
  \@namedef{math_char:NNn}{}%
  \lccode`~=`#2 \lowercase{\global\mathchardef#1=~}%
  \endgroup
}
\makeatother

\aliasmathchar\semicolon{;}\show\semicolon

\begin{document}

\begin{tikzpicture}
\draw (0,0) node {$\lvert x\semicolon\rvert$};
\end{tikzpicture}

\end{document}

相关内容