文件内容和新环境问题

文件内容和新环境问题

我需要在外部文件上编写一些内联代码,然后用 加载它listings。我想定义一个新环境,但如果我这样做,filecontents则不会保存第一行代码(参见 MWE):

\documentclass[]{article}
\usepackage{listings}
\usepackage{filecontents}

\newenvironment{MyNewEnvironment}[2]{%
  \def\temp{#1}%
  \csname filecontents*\endcsname{\temp}%
  #2%
}%
{\csname endfilecontents*\endcsname%
 \lstinputlisting{\temp}%
}%


\begin{document}

\begin{MyNewEnvironment}{foo.txt}%
one
two
three
four
five

\end{MyNewEnvironment}

\end{document}

生成的 foo.txt 包含:

two
three
four
five

答案1

我建议使用fancyvrbxparse,这样也可以将选项传递给\lstinputlisting

\documentclass{article}
\usepackage{fancyvrb,xparse,listings}

\NewDocumentEnvironment{MyNewEnvironment}{O{}m}
  {\VerbatimOut{#2}}
  {\endVerbatimOut\lstinputlisting[#1]{#2}}

\begin{document}

\begin{MyNewEnvironment}[columns=fullflexible]{foo.txt}
one
two
three
four
five

\end{MyNewEnvironment}

\end{document}

答案2

正如 egreg 在其评论中所说,这可能不是正确的使用方法filecontents*

无论如何,将你的 MWE 更改为

\documentclass[]{article}
\usepackage{listings}
\usepackage{filecontents}

\newenvironment{MyNewEnvironment}[1]{%
  \def\temp{#1}%
  \csname filecontents*\endcsname{\temp}%
}%
{\csname endfilecontents*\endcsname%
 \lstinputlisting{\temp}%
}%


\begin{document}

\begin{MyNewEnvironment}{foo.txt}
one
two
three
four
five
\end{MyNewEnvironment}

\end{document} 

对我来说很好用。

相关内容