带有换行符的标记列表,用于将多行写入文件

带有换行符的标记列表,用于将多行写入文件

我使用一个包 (gnuplottex),它使用命令\verbatim@start/processline/end(by \immediate\write\FileHandle{\the\verbatim@line}) 将环境内容写入文件。现在我想修改该包,在每个文件的开头插入几行用户定义的代码。

我定义了一个标记列表来存储行和两个命令来设置这些标题行:

\newtoks\headerlines
\def\setheaderlines#1{\headerlines{#1}}
\def\addtoheaderlines#1{\headerlines\expandafter{\the\headerlines#1}}

然后,我将标记写入到文件中的\verbatim@start,之前\immediate\write\FileHandle{\the\headerlines}。这对于单行来说很好,但我需要将多行写入文件,因此请保留标记中的换行符并将其写入文件。目前,这种情况不会发生:所有内容都放在一行上。如何保留标记列表中的换行符并将其作为单独的行写入文件?

换句话说:

\setheaderlines{header line 1
header line 2}

写入文件为

header line 1 header line 2`

代替

header line 1
header line 2

答案1

您可以将 设置为扫描^^M时的正常字符。这意味着标记列表包含字符。最后,您必须将此字符设置为打印此标记列表时。\headerlines^^M\newlinechar

\newtoks\headerlines

\def\setheaderlines{\headerlines={}\addtoheaderlines}
\def\addtoheaderlines{%
   \bgroup
   \catcode`\^^M=12
   \addtoheaderlinesA
}
\def\addtoheaderlinesA#1{\egroup\headerlines\expandafter{\the\headerlines#1}}

\def\addnltoheaderlines{\bgroup
   \lccode`X=`\^^M
   \lowercase{\egroup\headerlines\expandafter{\the\headerlines X}}%
}    
\def\writeheaderlines{%
   \bgroup
   \newlinechar=`\^^M
   \immediate\write16{\the\headerlines}%
   \egroup
}

Test:

\setheaderlines{%
line 1
line 2
}
\addtoheaderlines{%
line 3
line 4
}

\writeheaderlines

编辑:我已经添加了\addtoheaderlines宏并将\setheaderlines宏替换为的特殊用法\addtoheaderlines

相关内容