以下问题:
\openin\inputfile=#1%
\loop%
\read\inputfile to \readline%
\unless\ifeof\inputfile%
\global\edef\filecontent{\filecontent\readline^^J}%
\repeat%
\closein\inputfile%
.....
\immediate\write\targetfile{\filecontent}
输入文件包含“#”、“$”等特殊字符以及 LaTex 命令。我需要在读取文件时扩展 LaTex 命令,所有其他特殊字符应保持不变。
我需要的是
\detokenize{\catcode`\\=0 \readline}
它将除“\”之外的所有标记都分配为 catcode 12。有什么想法吗?
答案1
我认为您正在尝试写出某个文件的副本,但命令已完全展开。
你可以省去catchfile
:
\begin{filecontents*}{\jobname.in}
\foo{abc} #$% \foo{A}%
xx\foo{#}
\end{filecontents*}
\documentclass{article}
\usepackage{catchfile}
\newcommand{\foo}[1]{--#1--}
\newcommand{\setupexpandfile}{%
\endlinechar=`^^J % when writing out, newlines will be preserved
\catcode`\#=12 % so # makes no problem
\catcode`\%=12 % so % is not a comment
% maybe others
}
\newcommand{\expandfile}[2]{%
\CatchFileEdef{\temp}{#1}{\setupexpandfile}%
\immediate\openout\denisout=#2\relax
\immediate\write\denisout{\temp}%
\immediate\closeout\denisout
}
\newwrite\denisout
\expandfile{\jobname.in}{\jobname.out}
\stop
我认为你确实不需要特别管理其他角色。
.out
这是处理后的文件内容。
--abc-- #$% --A--%
xx--#--