我使用一个包 (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
。