是否可以使用循环或宏来导入文件的所有标记部分,同时排除其他部分?

是否可以使用循环或宏来导入文件的所有标记部分,同时排除其他部分?

作为后续行动这个问题


情况

我想从我已 TeX 处理的脚本中创建一个摘录,作为最重要的陈述(定理和定义)的概要。

我试图以保留原始编号的方式导入文件的各个部分(如上面提到的问题),这就是 MWE 导入全部但不打印某些部分的原因。

为了使导入更容易,我更喜欢一种(或两种)类型的标签:%<*include> ... %</include>(& %<*exclude> ... %</exclude>)。在缩短版本的文件中,我需要一种方法来遍历所有标签并显示一些标签(同时隐藏其他标签)。

这意味着工作量会少很多!有没有办法通过循环、宏或其他包导入来实现这一点?


问题

是否可以使用循环或宏来导入文件的所有标记部分,同时排除其他部分?

笔记:A类似未解答的问题不考虑编号,因此导入方式不同


平均能量损失经过图哈米(略有改动)

第一个文件(带标签)

\documentclass{amsart}
\usepackage{lipsum}

\newtheorem{theorem}{Theorem}
\newtheorem{lemma}[theorem]{Lemma}
\theoremstyle{definition}
\newtheorem{definition}[theorem]{Definition}
\newtheorem{example}[theorem]{Example}
\begin{document}
%<*tag>
\lipsum[1]
Here we go
%</tag>
%<*atag> 
\begin{definition}
    some bla bla
\end{definition}
%</atag>
\begin{theorem}
    more bla bla
\end{theorem}
\begin{definition}
    some bla bla
\end{definition}
%<*btag>
\begin{definition}
    some bla bla
\end{definition}
\begin{theorem}
    more bla bla
\end{theorem}
%</btag>
%<*ctag>
\lipsum[1-2]
%</ctag>
%<*dtag>
\begin{lemma}
    more bla bla
\end{lemma}
\begin{theorem}
    more bla bla
\end{theorem}
%</dtag>
%<*etag>
\lipsum[1-2]
\begin{example}
    some bla bla
\end{example}
%</etag>
\begin{theorem}
    more bla bla
\end{theorem}
\end{document}

最终文件

\documentclass{amsart}
\usepackage{lipsum}

\usepackage{catchfilebetweentags}
\newtoks\temptoken

\newtheorem{theorem}{Theorem}
\newtheorem{lemma}[theorem]{Lemma}
\theoremstyle{definition}
\newtheorem{definition}[theorem]{Definition}
\newtheorem{example}[theorem]{Example}
\begin{document}
\lipsum[1]
\CatchFileBetweenTags\temptoken{equ}{tag}% capture part1
\setbox0=\vbox{\the\temptoken}%  skip part1
\CatchFileBetweenTags\temptoken{equ}{atag}% capture part2
\the\temptoken % display part2

\CatchFileBetweenTags\temptoken{equ}{btag}% capture part3
\setbox0=\vbox{\the\temptoken}%  skip part3
\CatchFileBetweenTags\temptoken{equ}{ctag}% capture part4
\setbox0=\vbox{\the\temptoken}%  skip part4

\CatchFileBetweenTags\temptoken{equ}{dtag}% capture part5
\the\temptoken%  display part5
\end{document}

MWE 预览

(有意采用奇数编号!)

答案1

这是一个解决方案。

这里我们需要一个标签tag并使用新环境mtexclude:这个环境对原始文件不执行任何操作,对于新文件,它将其内容保存到一个盒子中,\mtbox因此跳过该内容。

file.tex(原始文件)

\documentclass{amsart}
\usepackage{lipsum}

\newtheorem{theorem}{Theorem}
\newtheorem{lemma}[theorem]{Lemma}
\theoremstyle{definition}
\newtheorem{definition}{Definition}
\newtheorem{example}{Example}
\newenvironment{mtexclude}{}{}
\begin{document}
First bla bla
%<*tag>
\section{Foo}
\subsection{Foo bar}
I need this
\begin{mtexclude}% begin of part to skiped
\section{Baz}
\subsection{Baz bar}
no need for this
\end{mtexclude}%   end
\section{End}
\subsection{End bar}
and need this \dots 
\begin{mtexclude}% begin of part to skiped
\section{Baz 2}
\subsection{Baz bar 2}
another part to be skiped
\end{mtexclude}%   end
The end
%</tag>
Last bla bla
\end{document}

新文件.tex

\documentclass{amsart}
\usepackage{lipsum}

\usepackage{catchfilebetweentags}
\newtoks\temptoken
\newbox\mtbox
\newenvironment{mtexclude}{\setbox\mtbox\vbox\bgroup}{\egroup}

\newtheorem{theorem}{Theorem}
\newtheorem{lemma}[theorem]{Lemma}
\theoremstyle{definition}
\newtheorem{definition}{Definition}
\newtheorem{example}{Example}

\begin{document}
\lipsum[1]
\CatchFileBetweenTags\temptoken{file}{tag}
\the\temptoken

\end{document}

相关内容