![自动化重复的 LaTex 代码](https://linux22.com/image/395557/%E8%87%AA%E5%8A%A8%E5%8C%96%E9%87%8D%E5%A4%8D%E7%9A%84%20LaTex%20%E4%BB%A3%E7%A0%81.png)
我有一个类似这样的表格,下面有生成该表格的代码。但是我想创建 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 函数作为kable
ok knitr 包或xtable
xtable 包来自动将 R 数据框加载为 latex 表(你也可以使用包stargazer
、Hmisc
等来做到这一点,但在我看来这两个已经足够了)。
---
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. 它简单但实用。
几乎肯定有一种方法可以制作一些自动化程序(例如使用对话框),如果有人想出一种简单的方法来做到这一点,那就太好了,但根据您的需求/知识,您会选择最适合您的方法。