我想知道是否有办法做到以下几点:
- 将文本摘录包装在环境中并进行标记;
- 稍后通过命令或类似方式在同一文档中(完整)引用它
\ref
。
通过这样做,人们可以修改换行的文本,而不必更新文档中对它的所有后续引用。
我知道一个简单的解决方法是\input{}
在包装句子的第一次出现和后面出现时同时使用;我只想知道是否还有更具体的东西。
更详细地说,我的目的是将一些必须引用的文本包装在给提交的论文审阅者的回复信中。
假设我在论文的第一个版本中写道:
it is clear that 2+2=5
现在审阅者让我注意有一个错误。我纠正了它,并且:
1-在论文的修订版中我写道:
\wraptext{twoplustwo}{it is clear that 2+2=4}
假设这\wraptext{}{}
是我所寻找的命令;
2-在回答审稿人时,我明确指出:
错误已被更正,如您在以下报告摘录中看到的那样:
\citewrappedtext{twoplustwo}
再次提供这\citewrappedtext{}
是调用摘录的命令。
这样,以后就可以再次修改这个句子:
\wraptext{twoplustwo}{it is obvious that 2+2=4}
而不必修正引号。
答案1
虽然“使用命令”或“使用环境”的答案似乎很明显,但这里有一个“附带电池”的解决方案(@GitHub,ZIP 档案):
\documentclass{scrartcl}
\pagestyle{empty}
\newcommand\declquotedtext[2]{\expandafter\def\csname quotedtext@#1 \endcsname{#2}}
\newcommand\defquotedtext[2]{\declquotedtext{#1}{#2}#2}
\newcommand\usequotedtext[1]{\csname quotedtext@#1 \endcsname}
\begin{document}
\defquotedtext{test}{This is a test text.}
\declquotedtext{later}{And this is a text declared for later use.}
This is something completely unrelated.
\usequotedtext{test}
\usequotedtext{later}
\end{document}
该命令\defquotedtext
将接受标签和内容,定义标签(用于\usequotedtext
)和打印内容(以避免重复)。正如 Ruben 所建议的,\declquotedtext
将执行以下任务\defquotedtext
:没有打印内容:
与通常的命令一样,请小心 和 后的\defquotedtext
空格\usequotedtext
。
实际上,我认为这已经被打包到某个地方了……
答案2
通过使用,在环境中执行此操作非常容易environ
。
实际实施取决于您真正的想法。我建议的内容甚至可以放在位于的辅助文件中\input
。\begin{document}
文本片段的顺序并不重要。
\documentclass{article}
\usepackage{environ}
\makeatletter
\NewEnviron{storequote}[1]{%
\@ifundefined{storequote@\detokenize{#1}}
{\global\expandafter
\def\csname storequote@\detokenize{#1}\expandafter\endcsname
\expandafter{\BODY}}
{\@latex@error{storequote error: key `\detokenize{#1}' already used}{\@ehd}}%
}
\newcommand{\getstoredquote}[1]{%
\@nameuse{storequote@\detokenize{#1}}%
}
\makeatother
\begin{document}
\begin{storequote}{funny}
This is a funny quotation.
\end{storequote}
\begin{storequote}{bad}
This is a bad quotation.
\end{storequote}
\begin{storequote}{funny}
This will raise an error.
\end{storequote}
Some text just to call ``\getstoredquote{bad}'' and
some other text for calling ``\getstoredquote{funny}''.
Enough.
\end{document}