如何将数据附加到临时文件?

如何将数据附加到临时文件?

我想创建一个新的临时文件(名为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意思是每个答案后面都会有一个空行。

相关内容