我想编写一个有两个参数的宏,filename
和content
。这个宏(我们称之为\mywrite
)将写入content
。filename
用法如下:
\mywrite{testfile.tex}{Hello, world!}
它还能够处理 TeX 命令,例如:
\mywrite{testfile.tex}{%
\begin{itemize}
\item First item
\end{itemize}
}
的内容testfile.tex
将是完整的逐项环境。
我尝试过使用变体fancyvrb
并filecontents
直接使用\write
命令但都无济于事。
这可能吗?
我的目标(不管它值不值)是能够将内容写入外部文件,然后从当前文件内部再次调用该文件。
答案1
在使用之前,您需要使用和\write
打开一个文件。在宏中执行所需操作的一种方法是:\newwrite
\openout
\documentclass{article}
\newwrite\mywriter% create a file handle
\newcommand\mywrite[2]{%
\immediate\openout\mywriter=#1% set the file name and open for writing
\immediate\write\mywriter{\unexpanded{#2}}% write without expanding
\immediate\closeout\mywriter% close file
}
\begin{document}
\mywrite{testfile.tex}{
\begin{itemize}
\item First item
\end{itemize}
}
\end{document}
VerbatimOut
但这可能不是你想要的,因为它忽略了换行符。更好的方法是使用幻想VRB包裹:
\documentclass{article}
\usepackage{fancyvrb}
\begin{document}
\begin{VerbatimOut}{testfile.tex}
\begin{itemize}
\item First item
\item Second
\end{itemize}
\end{VerbatimOut}
\end{document}
这两种方法都不允许您附加到文件,但如果您要向给定文件写入大量材料,那么像这样的宏/环境可能不是您真正想要的。