带有单元格 \pm 的表格,另一个单元格使用 pgfplotstable

带有单元格 \pm 的表格,另一个单元格使用 pgfplotstable

比如说,我有一个文本文件

10.0123235 5.0234324
11.2342345 6.02343256

其中第一列是值,第二列是标准差。

我正在尝试弄清楚如何\pm使用 pgfplotstable 自动将其放入带有符号的表中?因此,我希望在表中的是$10\pm5$$11\pm6$

应该是这样的风格

\pgfplotstabletypeset[
    columns={0},
    columns/0/.style={
         column name={$value$},
         postproc cell content/.style={
              @cell content=##0$\pm$##1
         }
    }
   ]...

但它不起作用......

更新:这是一个最简单的 LaTeX 示例:

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\pagestyle{empty}
\usepackage{pgfplotstable}
\usepackage{array}
\usepackage{colortbl}
\usepackage{booktabs}
\usepackage{eurosym}
\usepackage{amsmath}
\usepackage{pgfplotstable}
\begin{document}
\begin{table}
\pgfplotstabletypeset[
    columns={0},
    columns/0/.style={
         column name={$0$},
         postproc cell content/.append style={
           /pgfplots/table/@cell content/.add={}{$\pm$ ##2 }
        }
    }
]{
10.0123235 & 5.0234324 \\
11.2342345 & 6.02343256
}
\end{table}
\end{document}

更新2

几乎可以正常工作的示例,问题是:如何控制数字的精度?

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\pagestyle{empty}
\usepackage{pgfplotstable}
\usepackage{array}
\usepackage{colortbl}
\usepackage{booktabs}
\usepackage{eurosym}
\usepackage{amsmath}
\usepackage{pgfplotstable}
\begin{document}

\pgfplotstableread{
10.0123235  5.0234324 
11.2342345  6.02343256
}\loadedtable

\pgfplotstablecreatecol[
   create col/assign/.code={%
         \getthisrow{0}\entry
         \getthisrow{1}\dev
         \edef\entry{\entry$\pm$\dev}%
         \pgfkeyslet{/pgfplots/table/create col/next content}\entry
   }]
  {new}\loadedtable

\begin{table}
\pgfplotstabletypeset[
    columns={new},
    columns/new/.style={
         string type,
         column name={$new$},
    }
]\loadedtable
\end{table}
\end{document}

UPDATE3:我发现了一个关于打印复杂的好话题数字。这实际上与我想要实现的非常相似...尝试根据我的需要改变它们的结果...

答案1

此功能也可以通过以下方式实现collcell

在此处输入图片描述

下面,我定义了两种列类型,V分别用于数值列和E错误列。该V列存储整数结果\Value,并将其与错误一起打印在E

代码:

\documentclass{article}
\usepackage{pgfplots}
\usepackage{collcell}

\newcommand*{\Value}{}%
\newcommand*{\Error}{}%

\newcommand{\SetValue}[1]{\pgfmathparse{int(floor(#1))}\xdef\Value{\pgfmathresult}}
\newcommand{\DisplayValueAndError}[1]{\pgfmathparse{int(floor(#1))}$\Value \pm \pgfmathresult$}

\newcolumntype{V}{>{\collectcell\SetValue}{l}<{\endcollectcell}}
\newcolumntype{E}{>{\collectcell\DisplayValueAndError}{l}<{\endcollectcell}}

\begin{document}

\begin{tabular}{V E}
    10.0123235  & 5.0234324  \\
    11.2342345  & 6.02343256 \\
\end{tabular}

\end{document}

答案2

这是一个有效的例子:

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\pagestyle{empty}
\usepackage{pgfplotstable}

\def\pgfmathprintpmnumber#1#2{%
    \pgfmathfloatparsenumber{\thisrow{#1}}%
    \let\valueRe=\pgfmathresult
    \pgfmathfloatparsenumber{\thisrow{#2}}%
    \let\valueIm=\pgfmathresult
    \edef\valueRe{\noexpand\pgfmathprintnumber[fixed zerofill]{\valueRe}}%
    %\show\valueRe
    \edef\valueIm{\noexpand\pgfmathprintnumber[fixed zerofill]{\valueIm}}%
    %\show\valueIm
    \toks0=\expandafter{\valueRe}%
    \toks1=\expandafter{\valueIm}%
    % we cannot use \edef\value{\valueRe\valueIm} as this would
    % expand \pgfmathprintnumber - which is not expandable.
    % Writing \the<tokenregister> expands the content of
    % <tokenregister> exactly once:
    \edef\value{\the\toks0 & $\pm$\the\toks1 }%
}


\begin{document}

\pgfplotstableread{
10.0123235  5.0234324 
11.2342345  6.02343256
}\loadedtable

\begin{table}
\pgfplotstabletypeset[
  columns/C11/.style={string type, column type={r@{}l}, column name={$c11$}},
  create on use/C11/.style={%
    create col/assign/.code={%
       \pgfmathprintpmnumber{0}{1}
       \pgfkeyslet{/pgfplots/table/create col/next content}\value
    }
  },
  columns={C11}
  ]{\loadedtable}
\end{table}

\end{document}

这是对此的一个轻微的修改回答

相关内容