\textdagger
在编译时使用时point meta={symbolic=\textdagger}
出现错误
! TeX capacity exceeded, sorry [input stack size=5000].
\curr@fontshape ->\f@encoding
/\f@family /\f@series /\f@shape
l.18 {(0,0) (1,2) (2,3)};
可比较的符号(例如\textdaggerdbl
或\textbullet
)会产生相同的错误。我可以用 替换\textdagger
,$\dagger$
然后就不会再出现错误了。但是,我使用的是point meta=explicit symbolic
,其中符号是在表文件中定义的,其中一个符号是\textdagger
。有一次,这工作正常,所以我不确定发生了什么变化。
最小(不)工作示例如下。
\documentclass{article}
\usepackage{pgfplots}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{tikzpicture}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
nodes near coords,
point meta={symbolic=\textdagger}]
\addplot+[sharp plot] coordinates
{(0,0) (1,2) (2,3)};
\end{axis}
\end{tikzpicture}
\end{document}
我正在使用TeX Live 2015
,并且我刚刚使用 更新了所有包tlmgr update --all
。
答案1
有些 LaTeX 符号包含字体命令,因为它们与相应的字体绑定。这样的字体命令相当危险,因为您不能将它们放入\edef
。
然而,PGFPLOTS 的大多数魔法都是通过巨大的\edef
' 来实现的。因此,它成为一个“功能”,而不是一个错误,人们必须尽力避免这些符号以及字体命令。
具体来说,我们在pgfplots.code.tex
3507 行看到键的定义
/pgfplots/point meta/symbolic/.style={/pgfplots/point meta/TeX code symbolic={\edef\pgfplotspointmeta{#1}}},
这\edef
会毁掉一切。
为了解决这个问题,我们用TeX code symbolic
来代替symbolic
。也就是说,
point meta={TeX code symbolic=\def\pgfplotspointmeta{\textdagger}}
或者
point meta/TeX code symbolic=\def\pgfplotspointmeta{\textdagger}
完整的例子如下
\documentclass[border=9,tikz]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
nodes near coords,
point meta/TeX code symbolic=\def\pgfplotspointmeta{\textdagger}]
\addplot+[sharp plot] coordinates
{(0,0) (1,2) (2,3)};
\end{axis}
\end{tikzpicture}
\end{document}
解决方法2
这是一个黑客行为。有人可能会猜想我们的\textdagger
会议\edef
只举行一次,所以我们可能会添加一次性保护
point meta={symbolic=\noexpand\textdagger}
或者
point meta/symbolic=\noexpand\textdagger