让子文件声明要包含在文档不同位置的部分

让子文件声明要包含在文档不同位置的部分

我想要几个 Latex 文件,导入或包含在主document.tex文件中,这些文件声明要包含在主文件中的不同部分,例如:

% in file a.tex
\begin{notes}
My notes from file A
\end{notes}

\begin{examples}
An example from file A
\end{examples}

%%%%%%%%%%%%%%%%%%%%%%%%%%%

% in file b.tex
\begin{notes}
My notes from file B
\end{notes}

\begin{examples}
An example from file B
\end{examples}

%%%%%%%%%%%%%%%%%%%%%%%%%%%

% in file document.tex

\section{Notes}
% input notes from a.tex and b.tex

\section{Examples}
% input examples from a.tex and b.tex

并有以下输出:

Notes
My notes from file A
My notes from file B

Examples
An example from file A
An example from file B

我可以有 4 个单独的文件而不是 2 个(a.notes.texa.examples.tex等),但如果可能的话,我想将与之相关的所有内容保存a在一个文件中。您知道是否有办法实现此行为?

答案1

当然,您可以使用collect包。在文件中,使用document.tex声明两个集合(notesexamples\definecollection,并使用 定义两个关联环境(noteexamplecollect

\usepackage{collect}

\definecollection{notes}
\definecollection{examples}

\makeatletter
\newenvironment{note}
  {\@nameuse{collect}{notes}{\par\noindent}{\par}{}{}}
  {\@nameuse{endcollect}}
\newenvironment{example}
  {\@nameuse{collect}{examples}{\par\noindent}{\par}{}{}}
  {\@nameuse{endcollect}}
\makeatother

在每个文件中a.texb.tex您可以使用这些环境来编写您的注释和示例:

文件a.tex

\begin{note}
First note in file \texttt{a.tex}.
\end{note}

\begin{note}
Second note in file \texttt{a.tex}.
\end{note}

\begin{note}
Third note in file \texttt{a.tex}.
\end{note}

\begin{example}
First example in file \texttt{a.tex}.
\end{example}

\begin{example}
Second example in file \texttt{a.tex}.
\end{example}

文件b.tex

\begin{note}
First note in file \texttt{b.tex}.
\end{note}

\begin{note}
Second note in file \texttt{b.tex}.
\end{note}

\begin{example}
First example in file \texttt{b.tex}.
\end{example}

\begin{example}
Second example in file \texttt{b.tex}.
\end{example}

\begin{example}
Third example in file \texttt{b.tex}.
\end{example}

然后,在document.tex包含文件a和必须包含集合的位置b使用。完整的示例如下:\includecoleectiondocument.tex

文件document.tex

\documentclass{article}
\usepackage{collect}

\definecollection{notes}
\definecollection{examples}

\makeatletter
\newenvironment{note}
  {\@nameuse{collect}{notes}{\par\noindent}{\par}{}{}}
  {\@nameuse{endcollect}}
\newenvironment{example}
  {\@nameuse{collect}{examples}{\par\noindent}{\par}{}{}}
  {\@nameuse{endcollect}}
\makeatother

\input{a}\input{b}

\begin{document}

\section{Notes}
\includecollection{notes}

\section{Examples}
\includecollection{examples}

\end{document}

结果如下:

在此处输入图片描述

相关内容