结合 newenvironment、quote 和 lstlisting (mcode)

结合 newenvironment、quote 和 lstlisting (mcode)

我正在尝试将各种软件包和命令与 PdfLaTeX 结合起来(通过 MS Windows 上的 MikTex),包括、和newenvironmentquote以创建一个环境来定义多个内联文本框,其中包含注释和标记代码片段。使用和进行的简单实验与文档中所示一致(例如 Oetiker 等人的 Latex 简明指南),但添加会破坏编译。报告的错误消息是 在之前遇到的。我调整了各个元素的顺序,但无济于事。mcodelstlistingquotenewenvironmentmcode/lstlisting\end{document}\end{quote}

以下操作无效:

\documentclass[12pt]{article} 

\usepackage[utf8]{inputenc}
\usepackage{xcolor}
\usepackage[pdftex]{hyperref}
\usepackage{amssymb}
\usepackage{geometry}
\usepackage{graphicx}
\usepackage[numbered,autolinebreaks,useliterate]{mcode}

\newenvironment{testcode}[2]%
{\small\begin{quote}title: #1
\begin{lstlisting}
#2\end{lstlisting}
}{\end{quote}}

\begin{document}

\begin{testcode}{some code}
{myvar= 1;}\end{testcode}

\end{document}

我保留了原始 LaTeX 文档中所有包的列表,因为我不确定包依赖关系。

对代码后半部分进行以下替换确实可以按照我希望的方式进行编译和排版,但是我无法将变量传递给newenvironment,从而消除了我想要的一些灵活性:

\newenvironment{testcode}
{\small\begin{quote}}{\end{quote}}

\begin{document}

\begin{testcode}{
   title: some code
   \begin{lstlisting}
      myvar= 1;
   \end{lstlisting}}
\end{testcode}

\end{document}

我也尝试过newenvironment用 来代替lstnewenvironment,有点根据解决方案,但并没有消除错误。非常感谢您的帮助。

答案1

在定义列表环境时,您必须谨慎使用 LaTeX 命令。这里我向您展示了如何使用testcode以及\lstnewenvironment不同的方式进行定义。

\documentclass[12pt]{article} 

\usepackage[utf8]{inputenc}
\usepackage{xcolor}
\usepackage{amssymb}
\usepackage{geometry}
\usepackage{graphicx}

% this is for “secondtest”
\usepackage{caption}
\captionsetup[lstlisting]{
  position=top,
  margin=3pc,
  justification=raggedright,
  singlelinecheck=false,
  font=small,
}
\usepackage[numbered,autolinebreaks,useliterate]{mcode}
\usepackage{hyperref}
\usepackage{lipsum} % Just for this example

\lstnewenvironment{testcode}[1]
  {\small\quote Title: #1}
  {\endquote}
\lstset{basicstyle=\ttfamily} % just to better see the listings

\lstnewenvironment{secondtest}[2][]
 {\small
  \lstset{
    aboveskip=\topsep,
    belowskip=\topsep,
    belowcaptionskip=\topsep,
    title=Title: #2,
    xleftmargin=3pc,
    #1}
 }
 {}

\begin{document}

\lipsum[2]

\begin{testcode}{some code}
myvar= 1;
\end{testcode}

\lipsum[2]

\begin{secondtest}{some code}
myvar= 1;
\end{secondtest}

\lipsum[2]

\end{document}

在此处输入图片描述

您还可以按照以下格式添加其他listings选项:secondtest

\begin{secondtest}[<listings options>]{the title}
<the code>
\end{secondtest}

相关内容