解除标记的例外情况

解除标记的例外情况

以下问题:

\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--#--

相关内容