我想在 Latex 文档中添加大型表格,并且希望数字与此样式类似
1- 这是什么风格或者如何采用它?
2- 除了复制和粘贴(它们在 .csv 或 .txt 文件中)之外,有没有更有效的方法将数值导入 Latex 文档?我拥有的数据样本如下
1.77535624862992e-09
-1.6503831338225e-11
1.42322204974969e-13
-1.25754292545496e-14
3.53124304517183e-14
9.52322722659394e-14
-5.37131689647326e-11
1.35862997839542e-10
2.09695836541009e-10
3.98007235542205e-10
答案1
第一个问题:TT 字体中的数字
在我看来,对于问题 1,您最想做的就是将数字放在电传打字机/等宽字体中。这可以通过多种方式实现。您可以\ttfamily
在表格外部使用以将默认电传打字机字体应用于整个表格(但在组内,这样就不会影响文档的其余部分)。然后在表格内部,您必须使用\textrm{...}
常规字体来显示您想要的任何文本。数学模式不受影响。
由于您正在处理数字,我还建议使用该siunitx
包,它允许您以相同的小数位数、相同的指数符号等一致地格式化数字。在表格中,它还提供了在小数点处和指数符号等对齐列中数字的方法。
使用等宽字体时,对齐可能不是那么重要,但是我还是建议使用该包。
例如,对于您的数据,您可以执行以下操作。我提供了 siunitx 列S
选项的注释,以便您了解它们是什么;在这里,重要的是我们将数字置于文本模式,继承当前文本字体而不重置它。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array,booktabs}
\usepackage{siunitx}
\begin{document}
\begingroup
\ttfamily
\begin{tabular}{%
>{\begin{math}}c<{\end{math}}% first column centered in math mode
S[% second column uses siunitx
output-exponent-marker = {\mathrm{E}},% use `E' as exponent marker
print-implicit-plus,% add + to positive numbers
reset-text-family=false,% use active text font (\ttfamily)
mode=text,% print as text
table-format=1.14e2,% one integer digit, 14 decimal digits, 2 exponent digits
minimum-decimal-digits=14,% pad to 14 decimal places
group-digits=false% don't put digits in blocks of 3
]}
\midrule
\multicolumn{1}{c}{\textrm{\textbf{X}}} & \multicolumn{1}{c}{\textrm{\textbf{Value}}} \\
\toprule
x_1 & 1.77535624862992e-09 \\
x_2 & -1.650383133822e-11 \\
x_3 & 1.42322204974969e-13 \\
x_4 & -1.25754292545496e-14 \\
x_5 & 3.53124304517183e-14 \\
x_6 & 9.52322722659394e-14 \\
x_7 & -5.37131689647326e+11 \\
x_8 & 1.35862997839542e-10 \\
x_9 & 2.09695836541009e+10 \\
x_{10} & 3.98007235542205e-10 \\
\bottomrule
\end{tabular}
\endgroup
\end{document}
查看siunitx 用户手册了解更多信息。
输出如下所示:
第二个问题:从外部文件读取数据
我在评论中推荐了这个csvsimple
包;在这里我使用的是其较新的“l3”版本。它允许您定义从 csv 文件读取数据的“csvreader”命令。您的数据中没有任何逗号,但从技术上讲它仍然算作一个单列 csv 文件,因此该包仍然有效。
核心命令的形式为
\csvreader[options]{filename}%
{mapping of columns to commands}%
{pattern of data to insert for each csv row}
许多选项都是专门用于创建表格的;详情见下文。文件名当然是要读取的 csv 文件的名称。您案例中的映射可能只是覆盖1=\commandname
为第一列和唯一列命名。模式是每行应该生成的。
在其文档第 48 页有一个使用 siunitx 的示例。对其进行调整以重新创建上面的表格,我们得到以下内容:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array,booktabs}
\usepackage{siunitx}
\usepackage[l3]{csvsimple}
\begin{document}
\begingroup
\ttfamily
\csvreader[
tabular = cc,
no head,
table head = \toprule \textrm{\textbf{X}} & \textrm{\textbf{Value}} \\ \midrule,
table foot = \bottomrule,
before reading = \sisetup{output-exponent-marker = {\mathrm{E}},
print-implicit-plus,
reset-text-family=false,
mode=text,
table-format=1.14e2,
minimum-decimal-digits=14,
group-digits=false},
]{data.csv}{1=\datanumber}{%
\(x_{\thecsvrow}\) & \tablenum{\datanumber}%
}
\endgroup
\end{document}
假设您有一个保存为的数字列表data.csv
,它看起来像这样:
1.77535624862992e-09
-1.650383133822e-11
1.42322204974969e-13
-1.25754292545496e-14
3.53124304517183e-14
9.52322722659394e-14
-5.37131689647326e11
1.35862997839542e-10
2.09695836541009e10
3.98007235542205e-10
(请注意,我根据您提供的内容更改了几个数字,以便您可以看到+
之前的指数,并在第二行中填充小数位,并在输出中自动生效。如果这是真实数据,您需要将它们改回来。)
输出与上表的输出图像相同。