VerbatimOut, newenvironment 및 문자 제거

Nov 14 2020

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 옵션이 있지만 찾지 못했습니다.

추신 : 새 태그 'verbatimout tabulation catcode'를 만들려면 평판이 300 이상 필요합니다.

답변

1 egreg Nov 14 2020 at 04:44

이것은 작동하는 것 같습니다.

\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줄 중간에 실수로 탭을 잃지 않도록 선호 할 수 있습니다 . 그럼에도 불구하고 초기의 것은 사라질 것입니다.

노트. 사이트에서 탭을 처리하는 방식 때문에 위 코드에는 탭이 표시되지 않습니다.