如何重用代码

如何重用代码

这个问题可能之前已经问过了,但我不确定要搜索什么。

我经常遇到这样的情况:我想在一张 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.texmytableB.tex),然后将它们包含在主文档中\input(例如\input{mytableA}\input{mytableB})。

我认为这种方法有一些优点:

  1. 主文档中的源代码更简洁。当有大量大表格时尤其有用。

  2. 编辑简单。编辑时不能在表格之外引入错误,反之亦然。如果某个版本出了问题,您就知道问题出在哪里。

  3. 有时您可能需要在不同的文档中使用同一张表。这样,更新只需要一次编辑,无需任何复制粘贴。

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}

相关内容