房源展示模式

房源展示模式

到目前为止,我猜这\lstinputlisting{file.ext}只是读取文件的内容并在lstlisting环境中使用它。下面的示例文件编译得很好,但如果我用(我的想法是:等效的)其他形式替换宏的内容,编译就会失败,

\documentclass{memoir}
\usepackage{listings}

\newcommand\MESFN[4][]{
   \lstinputlisting{a.c}
%  \begin{lstlisting}    int i, sum = 0;  \end{lstlisting}
}

\begin{document}
  \MESFN[]{}{}{}
\end{document}

我找到了问题(和答复) 为什么 lstlisting 不能保存在命令中?,我明白为什么它会失败。但是,为什么另一种形式会成功?为 提供文件或直接内容之间还有其他区别吗listings?(也许 \lstinline 也一样)

答案1

原因很简单,LaTeX 只读取文件名而不读取文件内容。在您的示例中,文件名是无害的。但有一些合法的文件名,LaTeX 无法处理(例如下面的示例\TEST)。

如果您想在.tex文件中包含源代码,您可以使用包filecontents,它将生成您想在宏中使用的文件。

\documentclass{memoir}
\usepackage{listings}
\usepackage{filecontents}

\begin{filecontents*}{b.c}
int i, sum = 0;

// crasy stuff, that LaTeX wouldn't like
c_r = a % b;
\end{filecontents*}

\newcommand\MESFN[4][]{
   \lstinputlisting{b.c}
}

\newcommand\TEST{
%   \lstinputlisting{b%29.c}
}

\begin{document}
  \MESFN[]{}{}{}
\end{document} 

相关内容