在下面的代码中
\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
逐字插入文件。最后一条指令可以放在循环中(这里是 循环)。VerbatimInput
fancyvrb
expl3
\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 来说,这已经很不错了)。