Environ 中的 PGFplots 格式错误

Environ 中的 PGFplots 格式错误

我尝试用以下代码编写一个简单的条形图环境pgf图以减少所需的标记。为此,我使用环境包裹。

由于某种原因,tikz 抱怨所提供的坐标存在格式错误。

梅威瑟:

\documentclass[varwidth=true, border=2pt]{standalone}

\usepackage{pgfplots}
\usepackage{environ}

\NewEnviron{barplot}{%
     \begin{tikzpicture}
        \begin{axis}[
            symbolic x coords={A, B, C},
            xtick=data,
            ymax=40,
            ymajorgrids=true
          ]
            \addplot[ybar,fill=gray] coordinates {
                \BODY
            };
        \end{axis}
    \end{tikzpicture}
}

\begin{document}

\begin{barplot}
(A, 10)(B, 20)(C, 30)
\end{barplot}

\end{document}

答案1

如果老年人pgfplots想要看到扩展的坐标列表而不是宏中的坐标列表,那么可以使用许多\expandafter或以下方式进行扩展:

\documentclass[varwidth=true, border=2pt]{standalone}

\usepackage{pgfplots}
\usepackage{environ}

\NewEnviron{barplot}{%
     \begin{tikzpicture}
        \begin{axis}[
            symbolic x coords={A, B, C},
            xtick=data,
            ymax=40,
            ymajorgrids=true
          ]
            \edef\processme{%
              \noexpand\addplot[ybar,fill=gray] coordinates {
                \BODY
              };%
            }\processme
        \end{axis}
    \end{tikzpicture}% comment to remove unwanted space
}

\begin{document}

\begin{barplot}
(A, 10)(B, 20)(C, 30)
\end{barplot}

\end{document}

结果

的更好变体egreg,它不会扩展单元格条目:

\documentclass[varwidth=true, border=2pt]{standalone}

\usepackage{pgfplots}
\usepackage{environ}

\NewEnviron{barplot}{%
     \def\process##1{%
       \addplot[ybar, fill=gray] coordinates {##1};
     }%
     \begin{tikzpicture}
        \begin{axis}[
            symbolic x coords={A, B, C},
            xtick=data,
            ymax=40,
            ymajorgrids=true
          ]
            \expandafter\process\expandafter{\BODY}
        \end{axis}
    \end{tikzpicture}%
}

\begin{document}

\begin{barplot}
(A, 10)(B, 20)(C, 30)
\end{barplot}

\end{document}

除了 之外\BODY,包environ还提供了以下接口\collect@body

\documentclass[varwidth=true, border=2pt]{standalone}

\usepackage{pgfplots}
\usepackage{environ}

\makeatletter
\newenvironment{barplot}{%
  \collect@body\process@barplot
}{}
\def\process@barplot#1{%
     \begin{tikzpicture}
        \begin{axis}[
            symbolic x coords={A, B, C},
            xtick=data,
            ymax=40,
            ymajorgrids=true
          ]
            \addplot[ybar, fill=gray] coordinates {#1};
        \end{axis}
    \end{tikzpicture}%
}
\makeatother

\begin{document}

\begin{barplot}
(A, 10)(B, 20)(C, 30)
\end{barplot}

\end{document}

作为打击乐器,使用pgfplotsv1.12 和 TikZ v3.0,不需要扩展技巧。

相关内容