如何制作收集参数并放置在后面部分的命令?

如何制作收集参数并放置在后面部分的命令?

我想推出自己的命令,从原则上实现类似的功能\index将索引术语放在后面的部分,或者将脚注中的文本放在页脚中。

\summaryandextended{
    I'm just a summary of a result, and should appear in main text.
}
{
    I'm a long, complicated derivation of the result above. 

    I belong in the back portion of the book, read only by the nerdiest of nerds.
}

\gatheredappendix % I collect all of the #2 arguments and display them.

我不想重复索引或脚注本身;我很好奇如何制作在文档指定部分内构建任意内容集合的命令。

答案1

这是一种expl3语法方式:将第二个参数存储在seq变量中以供稍后使用,然后用显示它\gatheredappendix

这样就不需要任何外部文件了(就像\index

\documentclass{article}

\usepackage{xparse}



\ExplSyntaxOn
\seq_new:N \l_gather_stuff_seq
\NewDocumentCommand{\storesecondarg}{+m}{%
  \seq_put_right:Nn \l_gather_stuff_seq {#1}
}
\NewDocumentCommand{\gatheredappendix}{}{%
  \seq_use:Nn \l_gather_stuff_seq {\par}
}
\ExplSyntaxOff

\NewDocumentCommand{\summaryandextended}{+m+m}{%
  #1%
  \storesecondarg{#2}%
 }


\begin{document}

\summaryandextended{
    I'm just a summary of a result, and should appear in main text.
}
{
    I'm a long, complicated derivation of the result above. 

    I belong in the back portion of the book, read only by the nerdiest of nerds.
}

\summaryandextended{
  Other stuff
}
{
  Other useless stuff

  Even more useless text
}

\vskip\baselineskip
\hrule

\vskip\baselineskip

\gatheredappendix % I collect all of the #2 arguments and display them.


\end{document}

在此处输入图片描述

答案2

这个任务可以通过 TeX 基元轻松解决。你不需要任何特殊的包。

\long\def\addto#1#2{\expandafter\def\expandafter#1\expandafter{#1#2}}
\def\gatheredappendix{}
\long\def\summaryandextended#1#2{#1\global\addto\gatheredappendix{#2\par}}

实际上,您只需要这三行代码(与所用的格式无关)。另一方面,当\usepackage{xparse}使用时,TeX 需要读取 21711 行代码。

答案3

没什么复杂的:这只是增强宏定义的问题:

\makeatletter
\newcommand{\summaryandextended}[2]{%
  #1% typeset the first argument
  \g@addto@macro\sean@extensions{\sean@extension{#2}}%
}
\gdef\sean@extensions{}% initialize

\newcommand{\gatheredappendix}{\sean@extensions}
\newcommand{\sean@extension}[1]{#1\par}% or whatever formatting you'd like
\makeatother

请注意,我并没有直接将第二个参数推送到替换文本中\sean@extensions,而是添加了一些结构,使其成为可用于特殊格式化文本的参数。例如,您可能希望使用分项列表。在这种情况下,将和的\sean@extension定义更改为\gatheredappendix\sean@extension

\newcommand{\gatheredappendix}{%
  \begin{itemize}
  \sean@extensions
  \end{itemize}
}
\newcommand{\sean@extension}[1]{\item #1}

答案4

您可以执行以下操作:

  1. 在您的序言中,设置\gatheredappendix为空字符串:

    \newcommand{\gatheredappendix}{}
    
  2. 然后定义一个带有两个参数的命令\summaryandextended,执行以下操作:

    a)\gatheredappendix通过添加第二个参数重新定义#2(参见附加到变量或 tex.stackexchange 上的其他地方)

    b) 输出第一个参数#1

当然,\summaryandextended可以做额外的事情,比如每当向 中添加内容时添加新的小节标题等\gatheredappendix

相关内容