在 TikZ 中使用外部表

在 TikZ 中使用外部表

如何使用以下命令将 tabela.xls 用作 LaTeX 表或甚至使用 TikZ 制作的表的数据源?注意:我想将 tabela.xls 用作多个文件的数据源。Tex 并且当我更改 tabela.xls 时它会同步。

\documentclass[a4paper]{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
  \begin{tikzpicture}
    \matrix[matrix of nodes,nodes={minimum width=1.5cm}] at (0,0)
      {
    1 & Knuth &         10\\
    2 & Lamport &  10\\
    3 & Mittelbach & 7\\
    4 & Oetiker &   7\\
      };
  \end{tikzpicture}
\end{document}

答案1

遗憾的是,没有办法直接使用xlsLaTeX 文件,更准确地说OLE 2 Compound Document是二进制格式。

从 2007 年开始,Microsoft Excel 使用基于Office Open XML的新格式。但我不认为从 LaTeX 解析它会更容易。xlsxXML更新:格式是压缩的,所以又是二进制的。

我的建议是使用更简单的格式,例如逗号分隔值。cvs是一种纯文本格式。Excel 可以轻松地将电子表格导出为csv

我们有datatool处理文件的包csv,可能有助于您填充表格。我不确定它如何与 一起工作TikZ

约瑟夫还建议我这pdfplotstable可能有助于显示数据。

如果您确实想坚持使用xls文件,那么 Werner 的建议是正确的选择。

希望能帮助到你。:-)

更新:这是一个简单明了的表格示例:

自由办公室

保存的时候我可以选择csv格式:

CSV 格式

这将为我提供以下纯文本(scores.csv):

ID,Name,Score
1,Knuth,10
2,Lamport,10
3,Mittelbach,7
4,Oetiker,7

现在,在 LaTeX 中使用datatool

ex1.tex

\documentclass[a4paper]{article}

\usepackage{datatool}

\begin{document}

\DTLloaddb[keys={ID,Name,Score}]{scores}{scores.csv}

\begin{table}[htbp]
\caption{Our final score}
\centering
\DTLdisplaydb{scores}
\end{table}

\end{document}

ex2.tex

\documentclass[a4paper]{article}

\usepackage{datatool}

\DTLloaddb[keys={ID,Name,Score}]{scores}{scores.csv}

\begin{document}

\begin{table}[htbp]
\caption{Our final score}
\centering
\begin{tabular}{clr}
\textbf{ID} & \textbf{Name} & \textbf{Score}
\DTLforeach{scores}{%
\id=ID,\name=Name,\score=Score}{%
\\ \id & \name & \score}     
\end{tabular}
\end{table}
\end{document}

输出:

桌子

(我不知道该怎么做TikZ,抱歉。)

这个问题有一个后续问题:luaLaTeX 可以将 xlsx 表格转换为 LaTeX 代码吗?。使用 LuaLatex,可能可以解压文件并从生成的 XML 中提取数据。不过,在我看来,这并不容易。

答案2

pgfplotstable(这是其中的一部分pgfplots)你可以做类似的事情

\documentclass{article}

\usepackage{pgfplotstable}
\usepackage{booktabs}

\begin{document}
\pgfplotstabletypeset[
    col sep=comma,
    columns/Name/.style={string type},
    every head row/.style={
        before row=\toprule,
        after row=\midrule},
    every last row/.style={
        after row=\bottomrule}
    ]{scores.csv}
\end{document}

在此处输入图片描述

答案3

对于执行此操作的另一种方法,如果您确实需要以某种二进制格式导入数据,例如xls,尤其是如果您想对数据进行某些计算,则可以使用RSweave.R统计软件可以读取格式使用gdata库,并Sweave允许您将R代码合并到latex文件中。假设您有一个data.xls如下所示的文件:

电子表格截图

您将创建一个包含以下内容的文件report.Rnw

\documentclass{article}
\usepackage{Sweave}

\begin{document}
<<echo=false, results=hide>>=
library(xtable)
library(gdata)
data <- read.xls("data.xls")
@
Table~\ref{tab:mydata} shows my data.
<<echo=false, results=tex>>=
print(xtable(data, caption = "My data", label="tab:mydata"))
@
\end{document}

如您所见,这是一个常规的 LaTeX 文件,其中的R代码片段由 <<options>>和分隔@在单独的行上。然后您可以Sweave像这样运行它:

R CMD Sweave report.Rnw 

这将生成一个report.tex文件。在该文件上运行 LaTeX 将会排版以下内容:

结果表

答案4

我写了一篇带有视频教程的文章,介绍如何在 Latex 中使用 Excel 制作表格。希望你会觉得它有用:http://quicklatex.blogspot.com/2012/02/how-to-create-table-in-latex-from-ms.html

第一种方法 - 使用 datatool 包

\documentclass{article}
\usepackage{datatool}
\DTLloaddb[keys={c1,c2,c3}]{ctext}{csvtext.csv}
\begin{document}
\begin{table}
\begin{tabular}{clr}
\textbf{Software} & \textbf{Manufacturer} & \textbf{Malware}
\DTLforeach{ctext}{
\cola=c1,\colb=c2,\colc=c3}{\\
\cola & \colb & \colc}
\end{tabular}
\end{table}
\end{document}

第二种方法-使用 pgfplotstable 包

\documentclass{article}
\usepackage{pgfplotstable}
\usepackage{booktabs}
\begin{document}
\pgfplotstabletypeset[
col sep=comma,
columns/Software/.style={string type},
columns/num1/.style={string type},
columns/num2/.style={string type},
every head row/.style={
before row=\toprule,
after row =\midrule
},
every last row/.style={after row=\bottomrule}
]{csvtext.csv}
\end{document}

相关内容