在 pgfplots 中导入包含美元符号的表格时出现问题

在 pgfplots 中导入包含美元符号的表格时出现问题

我使用 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}

相关内容