如何使用 \immediate\write 将逐字代码写入文件?

如何使用 \immediate\write 将逐字代码写入文件?

我正在使用 egreg 的回答中描述的技术将反斜杠写入文件的有效方法在外部文件中写入 LaTeX 代码:

\newwrite\mywriter
\NewEnviron{writethis}
    {\immediate\write\mywriter{\unexpanded\expandafter{\BODY}}}
\begin{document}

\immediate\openout\mywriter=\jobname-later.tex
\begin{writethis}\textbf{abc}\end{writethis}
\immediate\closeout\mywriter

但是,我不能将它与逐字文本一起使用:

\begin{writethis}
\begin{verbatim}
  foo() {
  }
\end{verbatim}
\end{writethis}

换行符已被删除。

如何使用 复制逐字代码 \immediate\write

答案1

我不会重新发明轮子。;-)

\documentclass{article}

\usepackage{fancyvrb}

\begin{document}

\begin{VerbatimOut}{\jobname-later.tex}
\begin{verbatim}
  foo() {
  }
\end{verbatim}
\end{VerbatimOut}

Something

\input{\jobname-later}

\end{document}

我们可以使用基础结构fancyvrb来定义VerbatimOutAppend,以便只有当我们想要时才关闭文件。

\documentclass{article}

\usepackage{fancyvrb}

\makeatletter
\newcommand{\OpenVerbatimOutAppend}[2]{%
  \expandafter\newwrite\csname martin@write@#1\endcsname
  \immediate\openout\csname martin@write@#1\endcsname=#2\relax
}
\newcommand{\CloseVerbatimOutAppend}[1]{%
  \immediate\closeout\csname martin@write@#1\endcsname
}
\def\VerbatimOutAppend{\FV@Environment{}{VerbatimOutAppend}}
\def\FVB@VerbatimOutAppend#1{%
  \@bsphack
  \begingroup
    \FV@UseKeyValues
    \FV@DefineWhiteSpace
    \def\FV@Space{\space}%
    \FV@DefineTabOut
    \expandafter\let\expandafter\FV@OutFile\csname martin@write@#1\endcsname
    \def\FV@ProcessLine{\immediate\write\FV@OutFile}%
    \let\FV@FontScanPrep\relax
    \let\@noligs\relax
    \FV@Scan}
\def\FVE@VerbatimOutAppend{\endgroup\@esphack}
\DefineVerbatimEnvironment{VerbatimOutAppend}{VerbatimOutAppend}{}
\makeatother

\begin{document}

\OpenVerbatimOutAppend{default}{\jobname-later.tex}

\begin{VerbatimOutAppend}{default}
\begin{verbatim}
  foo() {
  }
\end{verbatim}
\end{VerbatimOutAppend}

Something

\begin{VerbatimOutAppend}{default}
\begin{verbatim}
  foo() {
  }
\end{verbatim}
\end{VerbatimOutAppend}

\CloseVerbatimOutAppend{default}

\input{\jobname-later}

\end{document}

多个输出文件可以同时处于活动状态;我们为每个文件分配一个符号名称,在本例中为default。以下是输出文件的内容:

\begin{verbatim}
  foo() {
  }
\end{verbatim}
\begin{verbatim}
  foo() {
  }
\end{verbatim}

相关内容