![如何将数据附加到临时文件?](https://linux22.com/image/238797/%E5%A6%82%E4%BD%95%E5%B0%86%E6%95%B0%E6%8D%AE%E9%99%84%E5%8A%A0%E5%88%B0%E4%B8%B4%E6%97%B6%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我想创建一个新的临时文件(名为main-temp.tex
),多次向其中附加数据,然后稍后导入内容。我还没有学会如何使用 TeX 文件操作,包括读写。
在这个问题中,我认为我只需要写入操作,因为在下面的场景中不需要逐行从文件中读取数据。因此使用\input{}
就足以读取所有数据。
% main.tex
\documentclass{article}
\usepackage{xcolor}
\newcommand\AppendAnswer[1]
{
% code to append #1 to a shared temporary file named main-temp.tex
}
\newcommand\AddQuestion[2]% #1 and #2 stand for question and answer, respectively
{%
% code to markup question #1
% for example
{\color{blue}#1}
%
% code to append answer #2
\AppendAnswer{#2}
}
\begin{document}
\section{Questions}
% Add some questions:
\AddQuestion{Are you kidding?}{No. I am not a joker.}
\AddQuestion{Really?}{Yes!}
\section{Answers}
% imports answers from the shared temporary file named main-temp.tex
\input{main-temp}
\end{document}
如何将数据附加到临时文件?我知道--enable-write18
调用时必须使用 switch latex
。我不想使用现有的包,例如exercise
等。
答案1
基本代码如下。
\documentclass{article}
\newwrite\ans
\immediate\openout\ans=\jobname-temp
\newcommand{\AddQuestion}[2]{#1\AppendAnswer{#2}}
\newcommand{\AppendAnswer}[1]{\immediate\write\ans{#1^^J}}
\newcommand{\PrintAnswers}{\immediate\closeout\ans\input{\jobname-temp}}
\begin{document}
\section{Questions}
\AddQuestion{Are you kidding?}{No. I'm not a joker.}
\AddQuestion{Really?}{Yes!}
\section{Answers}
\PrintAnswers
\end{document}
您负责向答案文件添加格式指令。您可能会受益于此\unexpanded
功能,以避免在\write
操作期间扩展命令:
\newcommand{\AppendAnswer}[1]{\immediate\write\ans{\unexpanded{#1}^^J}}
是一个很好的方法,但你可能需要混合使用扩展和非扩展的写入:例如,参考编号需要扩展。所以,假设你有一个计数器来跟踪问题
\newcounter{question}[section]
\renewcommand{\thequestion}{\thesection.\arabic{question}}
\newcommand{\AppendAnswer}[1]{%
\immediate\write\ans{\thequestion}%
\immediate\write\ans{\unexpanded{#1}^^J}}
定义后\AddQuestion
也增加question
计数器。
最后的^^J
意思是每个答案后面都会有一个空行。