![如何制作收集参数并放置在后面部分的命令?](https://linux22.com/image/322254/%E5%A6%82%E4%BD%95%E5%88%B6%E4%BD%9C%E6%94%B6%E9%9B%86%E5%8F%82%E6%95%B0%E5%B9%B6%E6%94%BE%E7%BD%AE%E5%9C%A8%E5%90%8E%E9%9D%A2%E9%83%A8%E5%88%86%E7%9A%84%E5%91%BD%E4%BB%A4%EF%BC%9F.png)
我想推出自己的命令,从原则上实现类似的功能\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
您可以执行以下操作:
在您的序言中,设置
\gatheredappendix
为空字符串:\newcommand{\gatheredappendix}{}
然后定义一个带有两个参数的命令
\summaryandextended
,执行以下操作:a)
\gatheredappendix
通过添加第二个参数重新定义#2
(参见附加到变量或 tex.stackexchange 上的其他地方)b) 输出第一个参数
#1
。
当然,\summaryandextended
可以做额外的事情,比如每当向 中添加内容时添加新的小节标题等\gatheredappendix
。