是否可以自动对表格中的数字进行四舍五入?
假设我有这个,以通常的方式在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
\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}