解决方法2

解决方法2

\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.tex3507 行看到键的定义

/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

相关内容