我正在写一本书,里面有很多这样的表格。有没有办法为下面显示的代码创建快捷方式。我想将表格标题设为变量,因为在下面显示的 MWE 中,除了\caption
单元格数据之外,其他一切都是常量。
我想要实现的是 - 我应该能够说\starttable
.....\endtable
复制这么多代码会给我我想要的结果,但它会让它不那么像 LaTeX
\begin{document}
\begin{table}[!htbp]
\begin{minipage}[b]{0.5\linewidth}%\centering
{\caption{Table name - 1}
\renewcommand{\arraystretch}{1.1}
\begin{tabular}{|c|c|c|c|}
\hline
Text-1 & Text-2 & Text-3 & Text-4 \\
\hline
& & & \\
& & & \\
& & & \\
\hline
\end{tabular}}
\end{minipage}
\hspace{0.5cm}
\begin{minipage}[b]{0.5\linewidth}
\centering
{\caption{Table Name - 2}
\renewcommand{\arraystretch}{1.1}
\begin{tabular}{|c|c|c|c|}
\hline
Text-1 & Text-2 & Text-3 & Text-4 \\
\hline
& & & \\
& & & \\
& & & \\
\hline
\end{tabular}}
\end{minipage}
\end{table}
答案1
我可以理解您希望简化表格材料的捕获并保持标记清晰。
通常,对于复杂的表格,我首先会简化排条目。对于您的情况,我们将按如下方式标记表格数据:
\starttable
\R test|test|test|test\\
\R test|test|test|test\\
\R test|test|test|test\\
\stoptable
我发现使用“|”比使用“&”更容易看,标记的文本看起来更整洁。和\starttable
只是\stoptable
两个宏,用于保存头部和末端材料。
\documentclass{article}
\begin{document}
\def\starttable{%
\begin{table}[!htbp]
\renewcommand{\arraystretch}{1.1}
\begin{tabular}{|c|c|c|c|}
\hline
Text-1 & Text-2 & Text-3 & Text-4 \\
\hline}
\def\stoptable{\hline\end{tabular}\end{table}}
\def\R #1|#2|#3|#4{ #1}
\starttable
\R test|test|test|test\\
\R test|test|test|test\\
\R test|test|test|test\\
\stoptable
\starttable %badly marked up table rather use the "|"
& & & \\
& & & \\
& & & \\
\stoptable
\end{document}
可以通过修改参数\startmacro
来添加标题和其他样式信息。
\def\starttable#1{%
\begin{table}[!htbp]
\caption{#1}
...
我不确定您是否总是有“双表”。在这种情况下,我将在不同的宏集(例如\starttwotables
和 )中重写上述内容。请注意,除非是环境,否则\endtwotables
LaTeX 不允许您定义以 开头的宏。\end
编辑多表
您可以使用与上述相同的语法添加一个或多个表格。\begin{table}...
如果您需要它们浮动,请用 括起来,或者将其保留以立即放置。
\documentclass{article}
\makeatletter
\usepackage[figurename=Figure.,
justification=RaggedRight,
labelfont={bf, footnotesize},
textfont={footnotesize},position=top]{caption}
\begin{document}
\listoftables
\def\starttable#1{%
\renewcommand{\arraystretch}{1.1}%
\minipage{0.45\textwidth}
\captionof{table}{#1}
\tabular{|c|c|c|c|}
\hline
Text-1 & Text-2 & Text-3 & Text-4 \\
\hline
}
\def\stoptable{%
\hline\endtabular
\endminipage\hspace{10pt}}
\def\R #1|#2|#3|#4{ #1}
\newpage
\begin{table}[h]
\centering
\starttable{First table caption}
\R test|test|test|test\\
\R test|test|test|test\\
\R test|test|test|test\\
\stoptable
%
\starttable{This is the second caption}
\R test|test|test|test\\
\R test|test|test|test\\
\R test|test|test|test\\
\stoptable
\bigskip
\starttable{This is the caption}
\R test|test|test|test\\
\R test|test|test|test\\
\R test|test|test|test\\
\stoptable
%
\starttable{This is the caption}
\R test|test|test|test\\
\R test|test|test|test\\
\R test|test|test|test\\
\stoptable
\starttable{This is the caption}
\R test|test|test|test\\
\R test|test|test|test\\
\R test|test|test|test\\
\stoptable
\end{table}
\end{document}
其他方法也是可行的。
答案2
您可以定义自定义环境。前两个表来自您的 MWE,第三个表是以下结果:
\begin{MyTabular}{Table Name - 3}
\end{MyTabular}
考虑到环境的工作方式,上述内容也可以写成如下形式,这更接近您的期望:
\MyTabular{Table Name - 3}
\endMyTabular
\documentclass{article}
\newenvironment{MyTabular}[1]{% #1 = caption
\begin{table}[!htbp]
\centering
\caption{#1}
\renewcommand{\arraystretch}{1.1}
\begin{tabular}{|c|c|c|c|}
\hline
Text-1 & Text-2 & Text-3 & Text-4 \\
\hline
& & & \\
& & & \\
& & & \\
\hline
}{%
\end{tabular}
\end{table}
}
\begin{document}
\begin{table}[!htbp]
\begin{minipage}[b]{0.5\linewidth}%\centering
{\caption{Table name - 1}
\renewcommand{\arraystretch}{1.1}
\begin{tabular}{|c|c|c|c|}
\hline
Text-1 & Text-2 & Text-3 & Text-4 \\
\hline
& & & \\
& & & \\
& & & \\
\hline
\end{tabular}}
\end{minipage}
\hspace{0.5cm}
\begin{minipage}[b]{0.5\linewidth}
\centering
{\caption{Table Name - 2}
\renewcommand{\arraystretch}{1.1}
\begin{tabular}{|c|c|c|c|}
\hline
Text-1 & Text-2 & Text-3 & Text-4 \\
\hline
& & & \\
& & & \\
& & & \\
\hline
\end{tabular}}
\end{minipage}
\end{table}
\begin{MyTabular}{Table Name - 3}
\end{MyTabular}
\end{document}