如何将环境的内容保存到不同的文件中

如何将环境的内容保存到不同的文件中

例如,我有 1 个 tex 文件A.tex包含以下内容:

\begin{Solution}{1}
D
\end{Solution}
\begin{Solution}{2}
D
\end{Solution}
\begin{Solution}{3}
A
\end{Solution}
\begin{Solution}{4}
B
\end{Solution}
\begin{Solution}{5}
C
\end{Solution}
\begin{Solution}{6}
C
\end{Solution}
\begin{Solution}{7}
A
\end{Solution}

从这个A.tex文件中提取一个名为的tex文件,B.tex其内容为:DDABCCA(即只有解决方案环境中的内容)我希望大家能有所帮助!

答案1

这里我提供了两种方法: - 一种xparse需要xparse2019-03-05 或更新版本的方法; - 一种environ方法

\documentclass{article}


\makeatletter
%% xparse approach, require xparse 2019-03-05 or newer
%\usepackage{xparse}
%\NewDocumentEnvironment{Solution}{m +b}
%  {\g@addto@macro\solution@body@acc{#2}}
%  {}
%% end of xparse approach

%% environ approach
\usepackage{environ}
\NewEnviron{Solution}[1]{%
  \xdef\solution@body@acc{\solution@body@acc\BODY}%
}
%% end of environ approach

% accumulation of "Solution" body
\def\solution@body@acc{}

% read A.tex, the "Solution" body is accumulated in \solution@body@acc
\input{A}

% write to B.tex
\newwrite\outputB
\immediate\openout\outputB B.tex
\immediate\write\outputB{\solution@body@acc}
\immediate\closeout\outputB
\makeatother


\begin{document}
pass
\end{document}

答案2

您可以重新定义\Solution环境:

\def\solutions{}
\def\Solution#1#2 #3 #4\end#5{\end{Solution}\edef\solutions{\solutions#3}}

然后就可以读取文件了A.tex。结果在\solutions宏中:

Solutions are: \solutions.

相关内容