定义一个具有逐字主体的环境,删除 TAB 字符并使用 VerbatimOut 将其写入文件

定义一个具有逐字主体的环境,删除 TAB 字符并使用 VerbatimOut 将其写入文件

我正在为 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

Tab 不是额外的对齐标签

如何将制表符输出到文件中

如何将字符重新定义为表格中的对齐制表符

但我无法让它们按我预期的方式工作。

或者也许有一个 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不希望在行中间丢失意外的标签。尽管如此,最初的标签仍会消失。

笔记。由于网站处理标签的方式,标签不会出现在上面的代码中。

相关内容