这个问题可能之前已经问过了,但我不确定要搜索什么。
我经常遇到这样的情况:我想在一张 A4 纸上打印相同的文本部分(或图像、表格等),以便将它们分发给一群人。例如,我可能想在一张纸上打印 2x4 个相同的表格。
原则上,我可以在我的编辑器中输入一部分内容并将其余部分复制/粘贴,将它们全部放入表格中或使用小页面等。
但是我宁愿只在我的 tex 文件中保留一次文本,以便以后可以轻松编辑它。所以我会以某种方式告诉 LaTeX 我想保存这部分代码并在以后使用另一个命令重新使用它。
我猜想输入/包含可以起作用,但我宁愿将其全部放在一个文件中。
我怎样才能实现这个目标?
答案1
您可以将代码本身保存在\newcommand
(在更多危险的TeX 世界,您可以使用,\def
否则\long\def
如果它包含段落分隔符)或者您可以保存渲染的对象以供以后调用,这里完成\savestack
(这是一个具有简化使用语法的保存框)。
一般来说,正如 egreg 所指出的,这些内容应该在顶层定义,因此无需扩展到当前组之外。但是,如果您需要从本地组内保存代码,则可以遵循\global\renewcommand 相当于 \global\def或者,在 TeX 世界中,使用\gdef
或\global\def
将定义的内存扩展到当前组之外。
请注意,使用 时\savestack
,字体、字体大小、颜色等的局部更改不会延续到之前渲染的框,这与 中保存的代码不同\def
。
\documentclass{article}
\usepackage{stackengine,xcolor}
\parskip 1em
\begin{document}
\newcommand\codeA{\begin{tabular}{c}This \\is \\a\\ test\end{tabular}}
\savestack\codeB{\begin{tabular}{c}This \\is ALSO \\a\\ test\end{tabular}}
Here is code A: \codeA
and code B: \codeB
\leavevmode\Huge\color{red} Now go Huge red
Here is code A: \codeA
and code B: \codeB
\end{document}
答案2
除了在宏中定义表格环境之外,另一种选择是将表格或表格浮点数写入外部文件(例如mytableA.tex
和mytableB.tex
),然后将它们包含在主文档中\input
(例如\input{mytableA}
和\input{mytableB}
)。
我认为这种方法有一些优点:
主文档中的源代码更简洁。当有大量大表格时尤其有用。
编辑简单。编辑时不能在表格之外引入错误,反之亦然。如果某个版本出了问题,您就知道问题出在哪里。
有时您可能需要在不同的文档中使用同一张表。这样,更新只需要一次编辑,无需任何复制粘贴。
MWE:
我的表A.tex:
\begin{tabular}{c}This \\is \\a\\ test\end{tabular}
mytableB.tex:
\begin{tabular}{c}This \\is ALSO \\a\\ test\end{tabular}
主要.tex:
\documentclass{article}
\parskip 1em
\begin{document}
Here is the table A: \input{mytableA}\par
and table B: \input{mytableB}\par
Again the table A: \input{mytableA}\par
Again the table B: \input{mytableB}
\end{document}
答案3
@Steven B. Segletes 给出的答案的变体,使用包scontents
。
\documentclass{article}
\usepackage{xcolor}
\usepackage[store-cmd=copy]{scontents}
\begin{document}
\Scontents{\begin{tabular}{c}This \\is \\a\\ test\end{tabular}}
\Scontents{\begin{tabular}{c}This \\is ALSO \\a\\ test\end{tabular}}
Here is code A: \getstored[1]{copy}
and code B: \getstored[2]{copy}
\leavevmode\Huge\color{red} Now go Huge red
Here is code A: \getstored[1]{copy}
and code B: \getstored[2]{copy}
\end{document}