我正在为 mscgen(另一个)编写一个 LaTeX 界面,并在新环境中使用 fancyvrb::VerbatimOut 将 tex 文件的一部分输出到外部文件中,对其进行处理,然后导入生成的图片。
信号图使用制表符缩进(是的,我知道,这很麻烦),而 VerbatimOut 通过将所有内容“按原样”写入外部文件来完成其工作。但是,mscgen 不喜欢制表符,所以我想知道在使用 VerbatimOut 时是否可以删除某些字符(或替换它们)。
就像是 :
\RequirePackage{fancyvrb}
\newenvironment{test}[1]
{\VerbatimOut[codes={\catcode`\^^I=9}]{#1}}
{\endVerbatimOut}
或者 :
\RequirePackage{fancyvrb}
\newenvironment{test}[1]
{\begingroup\catcode9=9\relax\VerbatimOut{#1}}
{\endVerbatimOut\catcode9=10\relax\endgroup}
当然还有更多的代码,但我们的想法是获取没有制表符的转义文本,或者至少用不超过一个空格替换:
\begin{test}{external_file.txt}
This\n
is\n
# a great \n
test\n
\end{test}
应生成以下文件“external_file.txt”:
This\n
is\n
# a great \n
test\n
从以下链接获得一些信息:
https://en.wikibooks.org/wiki/TeX/catcode
但我无法让它们按我预期的方式工作。
或者也许有一个 mscgen 选项可以删除输入的字符,但我没有找到它。
答案1
这似乎有效:
\documentclass{article}
\usepackage{fancyvrb}
\newenvironment{test}[1]
{\VerbatimEnvironment\VerbatimOut[codes={\catcode`\^^I=9}]{#1}}
{\endVerbatimOut}
\begin{document}
\begin{test}{\jobname.test}
This line has no tab
This line has one tab
This line has two tabs
This line has no tab
\end{test}
\VerbatimInput{\jobname.test}
\end{document}
这是我得到的输出文件:
This line has no tab
This line has one tab
This line has two tabs
This line has no tab
并且输出证明了这一点:
但是,您可能\catcode`\^^I=10
不希望在行中间丢失意外的标签。尽管如此,最初的标签仍会消失。
笔记。由于网站处理标签的方式,标签不会出现在上面的代码中。