自动化重复的 LaTex 代码

自动化重复的 LaTex 代码

我有一个类似这样的表格,下面有生成该表格的代码。但是我想创建 50 个这样的表格,当然,值也会发生变化。

在此处输入图片描述

我怎样才能做到这一点而不用编写50遍代码?

---
# Combining rows and columns 
title: "Untitled"
output: pdf_document
header-includes:
- \usepackage{caption}
- \usepackage{multirow}
- \usepackage{setspace}
---

\begin{tabular}{ |p{3cm}||p{3cm}|p{3cm}|p{3cm}|  }
\hline
 start & Jay & Arm & Eem\\
\hline
 X & 10 & 9 & 8 \\
 Y & 3  & 6 & 10 \\
 Z & 1  & 6 & 5  \\
\hline
\end{tabular}

答案1

如果表相同,请创建自己的环境。\newenvironment宏的参数指定环境的名称、启动时发生的情况以及结束时发生的情况。

\documentclass ...
...
\newenvironment{mytable}
{\begin{tabular}{ |p{3cm}||p{3cm}|p{3cm}|p{3cm}|  }
   \hline
   start & Jay & Arm & Eem\\
   \hline}
{\hline
   \end{tabular}}
...
\begin{document}
...
\begin{mytable}
 X & 10 & 9 & 8 \\
 Y & 3  & 6 & 10 \\
 Z & 1  & 6 & 5  \\
\end{mytable}
...
\end{document}

答案2

这个问题很奇怪,因为你显然在使用 Rmarkdown。当然,然后你可以利用 markdown 的简单性来手动制作表格,当然,你可以使用 R 函数作为kableok knitr 包或xtablextable 包来自动将 R 数据框加载为 latex 表(你也可以使用包stargazerHmisc等来做到这一点,但在我看来这两个已经足够了)。

姆韦

---
title: "Untitled"
output: pdf_document
---

```{r,echo=F}
df<- data.frame(start=c("X","Y","Z"),Jay=c(10,30,1),Arm=c(9,6,6),Eem=c(8,5,10))
```

:With Rmarkdown

|start  |  Jay|  Arm|  Eem|
|:------|----:|----:|----:|
|X      |   10|    9|    8|
|Y      |    3|    6|   10|
|Z      |    1|    6|    5| 


:With Rmarkdown (simplest)

start       Jay   Arm    Eem
-------  ------ ----- ------
X            10     9      8 
Y             3     6     10 
Z             1     6      5  


```{r,echo=F}
knitr::kable(df,caption="with knitr")
```

\belowcaptionskip1em
```{r,echo=F,results='asis',message=FALSE}
require(xtable)
options(xtable.comment = F)
print(xtable(df,digits=0, caption="with xtable"),include.rownames = F,booktabs=T, caption.placement="top")
```

答案3

您没有提供足够的信息。

如果您有 50 个csv包含数据的文件,则可以\foreach使用\csvreader

为了方便起见,我的示例只有三个文件,但您可以拥有任意数量的文件。

\documentclass{article}
\usepackage{csvsimple}
\usepackage{booktabs}
\usepackage{pgffor}
\usepackage{caption}

% filecontents is only to create the files, you don't need the following code if you already have them
\usepackage{filecontents}
\begin{filecontents*}{file1.csv}
start, Jay, Arm, Eem
 X, 10, 9, 8 
 Y, 3, 6, 10 
 Z, 1, 6, 5
\end{filecontents*} 
\begin{filecontents*}{file2.csv}
start2, Barbara, Bea, Bill
 X, 2, 2, 2 
 Y, 2, 2, 2 
 Z, 2, 2, 2
\end{filecontents*} 
\begin{filecontents*}{file3.csv}
start3, Carla, Chuck, Colin
 X, 3, 3, 3 
 Y, 3, 3, 3 
 Z, 3, 3, 3
\end{filecontents*} 
\begin{document}
\foreach \ind in {1,...,3}% you can have 50 instead of 3 here
{\begin{table}[htb]
    \centering
    \caption{A table from \texttt{file\ind.csv}}
    \csvreader[tabular=cccc,
        head=false,
        table head=\toprule,
        late after line=\\,
        late after first line=\\\midrule,
        table foot=\bottomrule,
        ]{file\ind.csv}{}{\csvcoli & \csvcolii & \csvcoliii & \csvcoliv}
\end{table}}
\end{document}

在此处输入图片描述

如果文件没有像我在 MWE 中假设的那样编号,您可以将文件名列表放入如下\foreach位置:

\foreach \myfile in {pippo,pluto,paperino}% put the list or your files here
{\begin{table}[htb]
    \centering
    \caption{A table from \texttt{\myfile.csv}}
    \csvreader[tabular=cccc,
        head=false,
        table head=\toprule,
        late after line=\\,
        late after first line=\\\midrule,
        table foot=\bottomrule,
        ]{\myfile.csv}{}{\csvcoli & \csvcolii & \csvcoliii & \csvcoliv}
\end{table}}

如果您的文件没有标题等,也可以更改代码以适应您的需要。

答案4

欢迎来到 TeX-SE!

我建议你两种方法:

  • 您可以创建一个模板表并保存它。这样,每次您想要制作表格时,只需复制并粘贴空表并插入所需的值即可。

  • 如果有一些计算要做,并且你有可能使用 Excel,请查看Excel 转 LaTeX. 它简单但实用。

几乎肯定有一种方法可以制作一些自动化程序(例如使用对话框),如果有人想出一种简单的方法来做到这一点,那就太好了,但根据您的需求/知识,您会选择最适合您的方法。

相关内容