对表格中的数字进行四舍五入/截断表格中的文本

对表格中的数字进行四舍五入/截断表格中的文本

是否可以自动对表格中的数字进行四舍五入?

假设我有这个,以通常的方式在tabular环境下制作:

pi  | 3.14592654
e   | 2.7182818284
phi | 1.6180339887

我可以控制显示多少位有效数字而不用手动截断数字吗?

例如,如果我需要四位有效数字,则数字应显示为

pi  | 3.1459
e   | 2.7183
phi | 1.6180

如果按照通常的规则对数字进行实际四舍五入而不是简单地截断,则可以获得加分。


我知道这可能并不简单,所以这里有一个宽松的版本,它也适用于我的情况(所有数字都有相同的精度和字符数):

(如何)我可以控制在表格的一列中呈现多少个字符?

因此,如果我将列中的文本定义为:

\begin{tabular} % some black magic column definition
   text & alongword\\
   text & anotherlongword\\
   text & morelongwords\\
\end{tabular}

我想要得到类似的东西:

text along
text anoth
text morel

我知道有非 TeX 的方法可以做到这一点,并且如果其他方法都失败了,我可能会决定编写一个脚本,但我很好奇是否有办法仅使用 TeX 和朋友来实现这一点。

答案1

对于数字:

有一些包,比如siunitx和 的数学引擎tikz(尤其是在 中pgfplotstable),可以用来格式化 LaTeX 中的数字。numprint可能是最简单的一个,可以轻松地在表格中使用。

numprint软件包提供了n表格N中数字的列类型,以及\nprounddigits设置精度。例如:

% \usepackage{numprint} in preamble
\npdecimalsign{.}
\nprounddigits{2}
\begin{tabular}{c|n{5}{2}|}
foo & 12345 \\
bar & 12345.12345 \\
baz & 0.00012345 \\
\end{tabular}
\npnoround

请阅读手册以了解更多选项。


对于常见字符,@TH 展示了一些 TeX 技巧。但是,您可以使用xstring包或其他东西来完成这项脏活。我不知道如何完全控制tabular,所以这里只是一个不完整的解决方案,混合了xtring和原始 TeX:

\halign{\StrLeft{#}{4} \cr
 abc \cr
 abcde \cr
 abcdefg \cr
}

欢迎提出任何进一步的建议。

答案2

这里有一个有点 hack 的方法(也就是说 Leo Liu 的答案要好得多,有时自己尝试这样做很有趣):

\documentclass{article}
\usepackage{array}
\usepackage{fp}
\newcolumntype{T}{>{\trunc}r}
\def\trunc\ignorespaces#1\\{%
        \FPset\a{#1}
        \FPround\a\a4
        \a
        \\
}
\begin{document}
\begin{tabular}{>{$}l<{$}T}
\pi  & 3.14159265358979323848\\
e    & 2.71828182845904523536\\
\phi & 1.61803399\\
x    & 37\\
\end{tabular}
\end{document}

替代文本

说明符T必须位于行的末尾,并且必须以 结尾\\。您可以编写一个类似的说明符,使其位于行的中间,方法是使用&而不是 来分隔它\\

原始版本仅在 的定义上有所不同\trunc

\def\trunc#1.#2#3#4#5#6\\{#1.#2#3#4#5\\}

答案3

\documentclass{article}
\usepackage{array,xstring}

\newcolumntype{N}{>{\GobbleA} r<{;;} }
\def\GobbleA\ignorespaces#1.#2;;{%
  \ignorespaces#1.\StrLeft{#2}{4}}

\newcolumntype{S}{>{\GobbleB} l }
\def\GobbleB#1#2\\{\StrLeft{#2}{4}\\}

\begin{document}
\begin{tabular}{>{$}l<{$} N S}
\pi  & 3.14159265358979323848 & delicious \\
e    & 2.71828182845904523536 & foo \\
\phi & 1.61803399             & extraordinarylong \\
x    & 37.11111               & { } \\
\end{tabular}

\end{document}

替代文本

答案4

A针织品-方法,制作.Rnw文件:

姆韦

\documentclass{article}
\usepackage{booktabs}  
\renewcommand\belowcaptionskip{1ex}
\begin{document}
<<echo=F,results="asis">>=
library(xtable)
x <- data.frame(Symbol=c("$\\pi$","$e$","$\\phi$","$x$"),
Value=c(3.14159265358979323848, 2.71828182845904523536, 
1.61803399, 37))
print(xtable(x,caption="Irrational numbers",align="ccr", 
digits=c(0,0,4)), 
      include.rownames=F, include.colnames=T, 
      booktabs=T, caption.placement="top",
      sanitize.text.function=function(x){x})
@
\end{document}

使用 Rstudio 可以轻松完成转换.Rnw→→ 。.tex.pdf

更手动的选项是仅运行 R 代码(MWE 的第 6-14 行)并将 LaTeX 输出复制并粘贴到真正的 LaTeX 文档中,在这种情况下将是:

% latex table generated in R 3.3.1 by xtable 1.8-2 package
% Sat Sep 30 00:38:28 2017
\begin{table}[ht]
\centering
\caption{Irrational numbers}
\begin{tabular}{cr}
\toprule
Symbol & Value \\
\midrule
$\pi$ & 3.1416 \\
$e$ & 2.7183 \\
$\phi$ & 1.6180 \\
$x$ & 37.0000 \\
\bottomrule
\end{tabular}
\end{table}

相关内容