\VerbatimInput 的格式化行

\VerbatimInput 的格式化行

我有一些文本文件需要包含在文档中,最好使用fancyvrbfvextra。我想突出显示这些文件中的某些行。确切的条件在这里并不重要,因为我的问题可以通过一个简化得多的示例来重现。

我尝试过以类似的方式结合xstring起来fancyvrb这个问题/答案。只要我使用Verbatim环境并内联文本,一切都会正常工作。如果我从外部文件中获取完全相同的内容并使用 导入它们\VerbatimInput,我会收到一条错误消息。为什么会这样?我该如何解决这个问题?

\documentclass{scrartcl}
\usepackage{filecontents}
\usepackage{xstring}
\usepackage{xcolor}
\usepackage{fancyvrb}

\renewcommand{\FancyVerbFormatLine}[1]{\IfBeginWith{#1}{a}{\textcolor{red}{#1}}{#1}}

\begin{filecontents}{test.txt}
a one
b two
a three
b four
\end{filecontents}

\begin{document}

\begin{Verbatim}
a one
b two
a three
b four
\end{Verbatim}

% \VerbatimInput{test.txt}
% will produce an error: Argument of \OT1\' has an extra }

\结束{文档}

答案1

如果我使用,则没有错误filecontents*

\begin{filecontents*}{\jobname.txt}
a one
b two
a three
b four
\end{filecontents*}

\documentclass{article}
\usepackage{xstring}
\usepackage{xcolor}
\usepackage{fancyvrb}

\renewcommand{\FancyVerbFormatLine}[1]{\IfBeginWith{#1}{a}{\textcolor{red}{#1}}{#1}}

\begin{document}

\begin{Verbatim}
a one
b two
a three
b four
\end{Verbatim}

\VerbatimInput{\jobname.txt}

\end{document}

(文件名并不重要,我选择\jobname.txt确保不会破坏我编译示例的目录中的文件)。

在此处输入图片描述

请注意,该包filecontents已过时。为什么使用filecontents会产生问题?因为你得到了

%% LaTeX2e file `vweg.txt'
%% generated by the `filecontents' environment
%% from source `vweg' on 2022/12/13.
%%
a one
b two
a three
b four

这肯定不是你想要的,对吧?

另一方面,更为稳健的方法是expl3

\begin{filecontents}[overwrite]{\jobname.txt}
a one
b two
a three
b four
\end{filecontents}

\documentclass{article}
\usepackage{xcolor}
\usepackage{fancyvrb}

\ExplSyntaxOn
\RenewDocumentCommand{\FancyVerbFormatLine}{m}
 {
  \str_if_eq:eeTF { \str_head:n { #1 } } { a } { \textcolor{red}{#1}} {#1}
 }
\ExplSyntaxOff

\begin{document}

\begin{Verbatim}
a one
b two
a three
b four
\end{Verbatim}

\VerbatimInput{\jobname.txt}

\end{document}

在此处输入图片描述

我离开了filecontents,所以你会看到没有出现任何错误。


扩展版本以应对更多情况:

\begin{filecontents}[overwrite]{\jobname.txt}
a one
b two
a three
b four
\end{filecontents}

\documentclass{article}
\usepackage{xcolor}
\usepackage{fancyvrb}

\ExplSyntaxOn
\RenewDocumentCommand{\FancyVerbFormatLine}{m}
 {
  \str_case_e:nnF { \str_head:n { #1 } }
   {
    { a } { \textcolor{red}{#1} }
    { b } { \textit{#1} }
    { \c_percent_str } { \textcolor{green!70!blue}{#1} }
   }
  {#1}
 }
\ExplSyntaxOff

\begin{document}

\begin{Verbatim}
a one
b two
a three
b four
\end{Verbatim}

\VerbatimInput{\jobname.txt}

\end{document}

在此处输入图片描述

相关内容