假设我有一个完整的乳胶文件,并且我只想提取在指定环境中出现的文本(即在自定义hypothesis
环境中)
例如:
\begin{document}
...
Lots of stuff that I don't want extracted
\begin{hypothesis}
The content that I want to extract
\end{hypothesis}
...
Lots more stuff I don't want to exract
...
\begin{hypothesis}
Some more content that I want to extract
\end{hypothesis}
\end{document}
问题:获取完整的乳胶源文件并仅提取指定环境中的文本并将其保存到新文本文件的简单方法是什么?
虽然我不是专家,但我听过很多人说 Perl 脚本非常适合字符串操作。我有时也会使用正则表达式。因此,除了针对上述问题的特定解决方案外,我还有兴趣了解相关 LaTeX 文本操作任务的一般方法。
更新:复制和粘贴并不是一个理想的选择,因为这种环境在 20,000 字的文档中出现了 20 多次。
答案1
除了 Ulrike 提供的选项外,您可能还对以下内容感兴趣提取包,它正是为解决您要解决的问题而编写的。
要将环境中的所有文本导出hypothesis
到名为的文件中filename
,请将以下代码添加到序言中:
\usepackage[active, generate=filename, extract-env={hypothesis}]{extract}
答案2
将一个环境的内容写入文件很容易:LaTeX 已经知道 filecontents 环境。filecontents 包扩展了这个环境。fancyvrb 定义了 VerbatimOut。listings 包也有一些内部代码(例如由 showexpl 使用)。如果您想收集多个环境的内容,则必须更改它们的定义,以便结尾不会关闭文件。
如果您不关心环境中的换行符和注释,您也可以尝试这样的操作:
\documentclass{article}
\usepackage{environ}
\newwrite\myexport
\makeatletter
\NewEnviron{test}{%
\toks@=\expandafter{\BODY}%
\immediate\write\myexport{\the\toks@}}
\makeatother
\begin{document}
\immediate\openout\myexport=test-export.tex
\begin{test}
\section{blub}
abc % cde
ghi
\end{test}
some text
\begin{test}
continuation
\end{test}
\immediate\closeout\myexport
\end{document}
答案3
正如威尔·罗伯逊 (Will Robertson) 让我知道的那样,这个extract
软件包让这项任务变得非常容易。
为了完整起见,序言中的以下代码完成了我想要的操作:
\usepackage[active, generate=filename, extract-env={hypothesis}]{extract}
将环境中的所有文本导出hypothesis
到名为 的文件中filename
。