我不想详细解释我为什么要这样做,但我想:
- 创建一个名为 的新计数器
filenumber
; - 创建一个名为的文件
\jobname\thefilenumber.txt
并写入内容; - 从该文件读取(输入)内容。
这是我的妈妈:
\documentclass[11pt]{article}
\usepackage{newfile}
\newcounter{filenumber}
\newoutputstream{outputfile}
\newcommand{\createoutputfile}[2]{%
\refstepcounter{filenumber}\label{#1}
\openoutputfile{\jobname\thefilenumber.txt}{outputfile}
\addtostream{outputfile}{#2}
\closeoutputstream{outputfile}
}
\begin{document}
\createoutputfile{timmyfile}{Hello world!}
Timmy, what would you like to tell the world?
Timmy's answer has been written to:\\
{\ttfamily \jobname\ref{timmyfile}.txt}
Timmy's answer: \input{\jobname1.txt}
%% The following does not work
\makeatletter
%{\@@input \jobname\ref{timmyfile}.txt}
\makeatother
\end{document}
我知道这\input
是不可扩展的,但即使使用 TeX 的\@@input
,如果我尝试使用之前创建的标签构造文件名,我也无法输入文件。取消注释该\@@input
行实际上会产生相反的效果,即创建 50 个包含“Hello world!”的相同文件(编号从 1 到 50)。
如果我使用\include
而不是\input
来跟踪正在发生的事情,.aux 文件包含以下内容:
\relax
\newlabel{timmyfile}{{1}{1}}
\@input{stackexchange_read_filename_from_ref1\hbox {}.txt.aux}
似乎该引用正在被扩展至1\hbox {}
。
这可能是问题所在吗?我该如何修复这个问题并以这种方式输入使用标签创建文件名的文件?
答案1
您想要一个可扩展的版本\ref
:
\documentclass[11pt]{article}
\usepackage{refcount}
\usepackage{newfile}
\newcounter{filenumber}
\newoutputstream{outputfile}
\newcommand{\createoutputfile}[2]{%
\refstepcounter{filenumber}%
\label{THISFILE#1}%
\openoutputfile{\jobname\thefilenumber.txt}{outputfile}
\addtostream{outputfile}{#2}
\closeoutputstream{outputfile}
}
\newcommand{\readfile}[1]{%
\InputIfFileExists{\jobname\getrefnumber{THISFILE#1}.txt}{}{``RERUN''}%
}
\begin{document}
\createoutputfile{timmyfile}{Hello world!}
Timmy, what would you like to tell the world?
Timmy's answer: \readfile{timmyfile}
\end{document}
当交叉引用无法解决时,就会”RERUN”
打印找不到文件的情况。