使用从文档其余部分提取的文本自动生成节体

使用从文档其余部分提取的文本自动生成节体

可能重复:
从乳胶文档中提取所有强调的单词

我正在写一份涉及一些标准的比较分析的报告。在报告的正文中,我对主要和次要问题进行了详细的比较。但是,在文档的末尾,我希望有一个单独的部分,只强调主要差异,以便没有时间仔细阅读详细报告的人可以阅读。

为此,我基本上想从文档的其余部分中提取特定的行并将其插入到我的最后一节中。但我希望这种插入是自动的,这样当我在文档中标记某一行文本时,它将自动添加到最后一节,即根据章节名称自动生成目录之类的功能。

我不知道如何表达这个问题。如能得到任何帮助我将不胜感激。

答案1

你可以从这个开始:

\documentclass{article}
\newtoks\majortoks

\newcommand{\majorissue}[1]{%
  \global\majortoks=\expandafter{\the\majortoks\issue{#1}}%
  #1}

\newcommand{\printmajorissues}{%
  \section*{Summary of major issues}
  \begin{itemize}
  \the\majortoks
  \end{itemize}
}

\newcommand{\issue}[1]{\item #1}

\begin{document}

\section{First}

This is a prolog. Next we describe the first major issue, that is about
walking \majorissue{barefoot in the park}. A minor issue is not having an
elevator.

\section{Second}

A meaningless text. The second major issue is that \majorissue{some like it hot}.
A minor issue is that nobody's perfect.

\printmajorissues

\end{document}

在此处输入图片描述

我们将所有要排版的内容收集到一个容器中(正式名称为 token 寄存器\majortoks)。\majorissue{some text}找到后,宏会将 token 添加到容器中

\issue{some text}

并且在该点打印“一些文本”。

从技术上讲,在这种情况下,我们将执行

\global\majortoks=\expandafter{\the\majortoks\issue{some text}}

所以寄存器增加全球,独立于分组结构。在\the\majortoks分配新值之前,先将寄存器中先前的内容传递过去,从而真正进行增量更新。

最后,宏\printmajorissues传递所积累的内容。在我的示例中,内容在环境中传递itemize,并\issue定义为提供,例如

\item some text

但你可以自由地用它做你想做的事。

仔细规划您的需要并精心设计的宏将会提供更好的帮助。

答案2

解决此问题的一种方法是使用 LaTeX 提供的辅助文件方法。下面是一个简单的示例,它只是将所有需要的文本收集到带有扩展名的新辅助文件中,.sum然后将其读回。优点是数据不保存在内存中,您可以在文档的任何位置获得摘要,但缺点是(当然)即使摘要位于最后,您也需要两次运行才能对其进行格式化。

我已经投入了一个itemize环境来格式化条目,但实际上可以使用任何其他方法。

\documentclass{article}

\makeatletter
\newcommand\mysummary{%
    \section*{some heading if heading wanted}%
    \begin{itemize}%
    \@starttoc{sum}%
    \@newlistfalse           %we don't want list errors if there are no items
    \end{itemize}%
    }

\newcommand\summarytext[1]{%
  \leavevmode
  \addtocontents{sum}%
     {%     
      \protect\item % standard formatting for each entry could go here
      #1%
      \par             % final formatting for each entry could go here     
     }%
  #1%               % process the text in mid document
}
\makeatother

\begin{document}

some text \summarytext{first text} some more text

\summarytext{second text with a \par paragraph break} and some more text

\mysummary

\end{document}

结果你得到

在此处输入图片描述

因为稍微更复杂的解决方案是使用,\addcontentline在这种情况下您将能够使用引用源的页码来格式化数据。

相关内容