同步两个文件

同步两个文件

我正在创建两个文档:一个是作业集,另一个是作业集的解决方案。每个作业集和解决方案集都是一个单独的.tex文件,作业集手册有一个主文件,答案集手册有.tex一个主文件。我希望有灵活性,这样我就可以更改作业的顺序,答案文档中也会“自动”完成相同的操作。

我正在使用\include插入每个作业,现在我有类似

\include{Ass1}

\include{Ass2}

\include{Ass3}

然后在答案中我需要写

\include{Ans1}

\include{Ans2}

\include{Ans3}

有没有办法可以有第三个文件(类似于 make 文件),我可以选择 3、1、2 这样的顺序,然后每个文档(家庭作业和答案)都使用此顺序以“正确”的顺序包含它们的文件,所以我所要做的就是重新编译它们的主.tex文件?我确实知道如何制作 make 文件(哈哈!)所以也许一个简单易懂的例子会有所帮助。

答案1

此解决方案依赖于作业和答案文件的命名方案。它AssX.tex按指定顺序获取外部文件,\include并将该顺序保存到\clist变量中。

在之后的任何地方,该\getallsolutions命令都会用(假定的)答案前缀替换作为第一个参数给出的前缀,即然后AssX变成AnsX并尝试加载这些文件!

这可以在某些外部文件中进行设置,然后order.tex输入它,order.tex而不必每次都更改主文档。

\documentclass{article}

\usepackage{xparse}

\ExplSyntaxOn
\clist_new:N \g_filename_clist
\NewDocumentCommand{\getallquestions}{m}{%
  \clist_gset:Nn \g_filename_clist {#1}
  \clist_map_inline:Nn \g_filename_clist {\include{##1}}
}

\NewDocumentCommand{\getallsolutions}{mm}{%
  \clist_map_inline:Nn \g_filename_clist {
    \tl_set:Nn \l_tmpa_tl {##1}
    \tl_replace_once:Nnn \l_tmpa_tl {#1} {#2}
    \include{\tl_use:N \l_tmpa_tl}
  }
}


\ExplSyntaxOff


\begin{filecontents}{Ass1.tex}
This Ass1
\end{filecontents}

\begin{filecontents}{Ass2.tex}
This Ass2
\end{filecontents}

\begin{filecontents}{Ass3.tex}
This Ass3
\end{filecontents}


\begin{filecontents}{Ans1.tex}
This Ans1
\end{filecontents}

\begin{filecontents}{Ans2.tex}
This Ans2
\end{filecontents}


\begin{filecontents}{Ans3.tex}
This Ans3
\end{filecontents}



\begin{document}

\getallquestions{Ass1, Ass2, Ass3}

\getallsolutions{Ass}{Ans}


Different order:

\getallquestions{Ass3, Ass1, Ass2}

\getallsolutions{Ass}{Ans}


\end{document}

更新——一些改进

\documentclass{article}

\usepackage{xparse}

\ExplSyntaxOn
\clist_new:N \g_filename_clist
\NewDocumentCommand{\getallquestions}{m}{%
  \clist_gset:Nn \g_filename_clist {#1}
  \clist_map_inline:Nn \g_filename_clist {\include{##1}}
}

\NewDocumentCommand{\getallsolutions}{mm}{%
  \clist_map_inline:Nn \g_filename_clist {
    \tl_set:Nn \l_tmpa_tl {##1}
    \tl_replace_once:Nnn \l_tmpa_tl {#1} {#2}
    \include{\tl_use:N \l_tmpa_tl}
  }
}


\ExplSyntaxOff


\begin{filecontents}{Ass1.tex}
This is Ass1
\end{filecontents}

\begin{filecontents}{Ass2.tex}
This is Ass2
\end{filecontents}

\begin{filecontents}{Ass3.tex}
This is Ass3
\end{filecontents}


\begin{filecontents}{Ans1.tex}
This is Ans1
\end{filecontents}

\begin{filecontents}{Ans2.tex}
This is Ans2
\end{filecontents}


\begin{filecontents}{Ans3.tex}
This is Ans3
\end{filecontents}



\begin{document}

\InputIfFileExists{order}{}{}

\getallsolutions{Ass}{Ans}


Different order:

\InputIfFileExists{differentorder}{}{}

\getallsolutions{Ass}{Ans}




\end{document}

order.tex

\getallquestions{Ass1, Ass2, Ass3}

differentorder.tex

\getallquestions{Ass3, Ass1, Ass2}

相关内容