我曾经pgfplots.sty
在演示文稿中绘制图表。我在循环中生成图表数据\foreach
并将其存储在宏中。这在演示文稿模式下运行良好,但使用beamerarticle
包和article
类时会显示许多错误。
示例代码如下:
%\documentclass{beamer}
\documentclass{article}
\usepackage{beamerarticle}
\usepackage{pgffor}
\usepackage{fp}
\usepackage{pgfplots}
\usepackage{etoolbox}
\usepackage{tikz}
\begin{document}
\def\tablebody{x,y\\}
\makeatletter
\foreach \x in {1,2,3,4}{
\FPeval\s{clip(x*x)}
\protected@xappto\tablebody{\x,\s\\}
}
\makeatother
\begin{frame}{Title}
\begin{figure}
\centering
\begin{tikzpicture}
\begin{axis}[xmin=0,xmax=5,ymin=0,ymax=20]
\edef\plotargs{[blue] table[col sep=comma,row sep=\\]{\tablebody}}
\expandafter\addplot\plotargs;
\end{axis}
\end{tikzpicture}
\end{figure}
\end{frame}
\end{document}
有什么方法可以使用 以文章模式显示情节吗beamerarticle
?
答案1
明显的问题是\\
永远不会存在\edef
或\xdef
。使用\protected@xappto
你会得到\protect\\
在 的论证中无效的\addplot
。
你可能添加合适的\noexpand
标记:
%\documentclass{beamer}
\documentclass{article}
\usepackage{beamerarticle}
\usepackage{pgffor}
\usepackage{fp}
\usepackage{pgfplots}
\usepackage{etoolbox}
\usepackage{tikz}
\begin{document}
\def\tablebody{x,y\noexpand\\}
\makeatletter
\foreach \x in {1,2,3,4}{
\FPeval\s{clip(x*x)}
\xappto\tablebody{\x,\s\noexpand\noexpand\noexpand\\}
}
\makeatother
\begin{frame}{Title}
\begin{figure}
\centering
\begin{tikzpicture}
\begin{axis}[xmin=0,xmax=5,ymin=0,ymax=20]
\edef\plotargs{[blue] table[col sep=comma,row sep=\noexpand\\]{\tablebody}}
\expandafter\addplot\plotargs;
\end{axis}
\end{tikzpicture}
\end{figure}
\end{frame}
\end{document}
这样,您就将其存储\\
在\noexpand\\
内部\tablebody
,最后\edef
将其转换为\\
。
答案2
我不确定这种解决方法是否会导致其他问题,但您可以像这样编译您的文档:
%\documentclass{beamer}
\documentclass{article}
\usepackage{beamerarticle}
\makeatletter
\renewcommand<>{\\}{\only#1{\beameroriginal\\}}
\renewcommand<>{\@centercr}{\only#1{\beameroriginal\@centercr}}
\renewcommand<>{\@normalcr}{\only#1{\beameroriginal\@normalcr}}
\makeatother
\usepackage{pgffor}
\usepackage{fp}
\usepackage{pgfplots}
\usepackage{etoolbox}
\usepackage{tikz}
\begin{document}
\def\tablebody{x,y\\}
\makeatletter
\foreach \x in {1,2,3,4}{
\FPeval\s{clip(x*x)}
\protected@xappto\tablebody{\x,\s\\}
}
\makeatother
\begin{frame}{Title}
\begin{figure}
\centering
\begin{tikzpicture}
\begin{axis}[xmin=0,xmax=5,ymin=0,ymax=20]
\edef\plotargs{[blue] table[col sep=comma,row sep=\\]{\tablebody}}
\expandafter\addplot\plotargs;
\end{axis}
\end{tikzpicture}
\end{figure}
\end{frame}
\end{document}