我刚刚在 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}