在 \foreach 范围内插入代码清单

在 \foreach 范围内插入代码清单

在下面的代码中

\documentclass[a4paper]{article}
\usepackage{listings}
\usepackage{tikz}
\begin{document}
\foreach\a in {x, y}{
\begin{verbatim}                                                                                                                              
  some code                                                                                                                                   
\end{verbatim}
}
\end{document}

环境verbatim在以下范围内失败\foreach

! File ended while scanning use of \@xverbatim.

环境也lstlisting失败了:

Package Listings Warning: Text dropped after begin of listing on input line 9.

如何在范围内插入代码清单\foreach

答案1

我提出的解决方案是将逐字材料写入外部文件(使用 包中的工具),然后使用verbatim逐字插入文件。最后一条指令可以放在循环中(这里是 循环)。VerbatimInputfancyvrbexpl3

\documentclass{article}
\usepackage{fancyvrb}
\usepackage{verbatim}
\usepackage{expl3}
\usepackage{xparse}
\usepackage{fancyvrb}
\fvset{baseline=t,commandchars=\\\{\}}

\makeatletter
\ExplSyntaxOn
\iow_new:N \myverbatim_stream
\cs_generate_variant:Nn \iow_now:Nn {NV}
\NewDocumentEnvironment {LoopVerbatim} {mmmm}
  {\iow_open:Nn \myverbatim_stream {myverbatim.tex}
   \tl_map_inline:nn {\ \\\{\}\$\&\#\^\_\%\~}
      {\char_set_catcode_other:N ##1}
   \char_set_catcode_active:N \^^M
   \cs_set:Npn \verbatim@processline
        {\iow_now:NV \myverbatim_stream \verbatim@line}
   \verbatim@start}
  {\iow_close:N \myverbatim_stream
   \int_step_variable:nnnNn {#1} {#2} {#3} {#4} 
        {\VerbatimInput{myverbatim.tex}}
  }
\ExplSyntaxOff
\makeatother  

\begin{document}

\begin{LoopVerbatim}{1}{1}{10}{\i}
def f(x):
    return x ** (\i)
\end{LoopVerbatim}

\end{document}

当然,你需要逐字逐句地使用转义符。在这里,\{保留}了它们的 TeX 标准含义(对于 Python 来说,这已经很不错了)。

相关内容