我使用 pgfplot 进行绘图(显然)。我从文件中加载表格,但我遇到一个问题,即我的列中可以包含美元符号,然后 LaTeX 会抱怨:
!额外},或者忘记了$。
\documentclass{beamer}
\usepackage{pgfplots}
\pgfplotsset{compat=1.5}
\def\myplot#1{
\foreach \file in {#1} {
\begingroup
\pgfplotstableread{\file}\report
\pgfplotstableforeachcolumn \report \as {\colname}{
\ifnum\pgfplotstablecol=0 %
\else
\begin{frame}
\begin{tikzpicture}
\begin{axis}[
title=\file,
xlabel={Recall},
ylabel={Precision},
ymin=0,
ymax=1,
legend entries={\colname},
]
\addplot table[ y = \colname] {\file};
\end{axis}
\end{tikzpicture}
\end{frame}
\fi
}
\endgroup
}
}
\begin{document}
\myplot{reports/report.csv}
\end{document}
报告.csv:
Recall org/apache/tools/ant/helper/ProjectHelperImpl$ProjectHandler/results.json
0.0 1.0
0.1 0.5252788975806337
0.2 0.5242015649572856
0.30000000000000004 0.5212258417099329
0.4 0.5148570391086534
0.5 0.5132710775465511
0.6000000000000001 0.4835666797890683
0.7000000000000001 0.4736173712634098
0.8 0.4705726571519701
0.9 0.46958229692873316
1.0 0.46958229692873316
我尝试使用\texttt
,但它也抱怨并显示不同的消息:
! 缺少插入 \endcsname。
在我看来,我需要以某种方式逃避$
,但如何,看到我从文件中获取它们?
答案1
问题是美元符号打开了数学模式,但从未关闭过。由于您只想打印美元符号,因此您会想用 替换$
字符串中的\string$
。
你可以这样做使用xstring
包通过写作\StrSubstitute{\colname}{$}{\string$}[\stripped]
。
\documentclass{beamer}
\usepackage{pgfplots}
\pgfplotsset{compat=1.5}
\usepackage{xstring}
\def\myplot#1{
\foreach \file in {#1} {
\begingroup
\pgfplotstableread{\file}\report
\pgfplotstableforeachcolumn \report \as {\colname}{
\ifnum\pgfplotstablecol=0 %
\else
\StrSubstitute{\colname}{$}{\string$}[\stripped]
\begin{frame}
\begin{tikzpicture}
\begin{axis}[
title=\file,
xlabel={Recall},
ylabel={Precision},
ymin=0,
ymax=1,
legend entries={\stripped},
legend style={font=\tiny,
anchor=north,
yshift=-8ex,
at={(current axis.south)}},
]
\addplot table[ y = \colname] {\report};
\end{axis}
\end{tikzpicture}
\end{frame}
\fi
}
\endgroup
}
}
\begin{document}
\myplot{report.csv}
\end{document}