比如说,我有一个文本文件
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}
这是对此的一个轻微的修改回答。