如何将内容累积到变量中然后才打印?

如何将内容累积到变量中然后才打印?

这就是我想要实现的目标:

\documentclass{article}
\begin{document}
\add{One}
\add{Two}
\add{Three}
\print % Only here "One Two Three" will be rendered
\end{document}

如何才能做到这一点?

答案1

例如电子工具箱(全局附加,如果您需要本地\gappto使用则可以)。\appto

\documentclass{report}
\usepackage{etoolbox}
\begin{document}
\newcommand\print{}
\gappto\print{one}
\gappto\print{two}
\gappto\print{three}

and now \print
\end{document}

答案2

\documentclass{article}
\newcommand\myadds{}
\newcommand\add[1]{\expandafter\def\expandafter\myadds
  \expandafter{\myadds#1 }}
\begin{document}
\add{One}
\add{Two}
\add{Three}
\myadds
\end{document}

在此处输入图片描述

如果您希望即使\adds 成组出现也能正常工作,请更改\def\gdef

如果您希望能够添加段落作为\add内容的一部分,请将其包含\expandafter\long在定义的开头\add

这个最终的、包罗万象的定义在功能上似乎与内置系统宏等效\g@addto@macro,例如

\documentclass{article}
\newcommand\myadds{}
\makeatletter
\newcommand\add[1]{\g@addto@macro\myadds{#1 }}
\makeatother
\begin{document}
\add{One}
\add{Two}
\add{Three}
\myadds
\end{document}

答案3

使用 L3 编程层(现在在 LaTeX 内核中)。

\documentclass{article}

\ExplSyntaxOn
\tl_new:N \myadds
\NewDocumentCommand \add { m } { \tl_put_right:Nn \myadds { #1 } }
\ExplSyntaxOff

\begin{document}

\add{One}
\add{Two}
\add{Three}
\myadds

\end{document}

答案4

我不太清楚你想要实现什么,所以我要冒险一试。我处理动态内容的方式是用另一种语言生成 LaTeX 代码 — 在我的情况下是使用 ERB 模板的 Ruby。常量元素是纯 LaTeX,而对于每个累积项,我使用 Ruby 生成适当的 LaTeX 代码。

如果可能的话,这还使您能够将数据逻辑与实际输出格式分开。但是,ERB 模板用于生成整个 LaTeX 文件,然后将其编译为 PDF — 我不确定您提出这个问题的动机是什么,因此不知道这是否适合您。

以下是示例代码逻辑:

\documentclass{article}
\begin{document}

\begin{env}
    <% $data.each do |item| -%>
        \strong{item}
    <% end -%>
\end{env}

\end{document}

相关内容