在Example环境中使用listing包排版源代码

在Example环境中使用listing包排版源代码

我想使用简单的示例环境清单用于打印 C 代码片段的包,如下所示

\begin{example}
   \lstinputlisting[caption=Hello.c]{../C/hello.c}
\end{example}

除了选定的字体外,这个方法效果很好。我用的是

  \lstset{basicstyle=footnotesize\ttfamily}.

但是,如下图所示,它与所选形状不匹配。似乎所选的字体形状在示例环境中具有更高的优先级。如何在示例环境中正确设置与 \lstset 命令匹配的代码片段的字体形状。

在此处输入图片描述

注意:我使用捷克语:Příklad = 示例

微电子工程协会

\documentclass[12pt,a4paper]{scrbook}
\usepackage{amsthm}
\usepackage{xltxtra}
\usepackage{listings}
\newtheorem{example}{Příklad}

\begin{document}

\lstset{ %
  language=C,                            % choose the language of the code
  basicstyle=\footnotesize\ttfamily,     % the size of the fonts that are used for the code
}

    \begin{example} 
      text text text 
      \begin{lstlisting}
        #include <stdio.h>

        int main(void)
        {
         int c;

         while ((c = getchar()) != EOF)
           putchar(c);
         return 0;
        }
      \end{lstlisting}

    \end{example}


    \end{document}

答案1

example包中的环境将amsthm内容排版为斜体。在内部,这可能是通过\itshape在示例开头调用来完成的。现在,当您创建列表时,样式选项\footnotesize\ttfamily已添加,但\itshape仍然处于“活动”状态。例如:

\documentclass{article}
\begin{document}
    test \itshape test \ttfamily test \upshape test
\end{document}

示例的输出结果

在您的示例中也发生了相同的事情:周围的文本位于\itshape,因此添加\ttfamily会在您的斜体打字机字体。要获得直立的打字机字体,您必须将其添加\upshape到列表样式中,如上例所示。

因此,你的 MWE 变成

\documentclass[12pt,a4paper]{scrbook}
\usepackage{amsthm}
\usepackage{xltxtra}
\usepackage{listings}
\newtheorem{example}{Příklad}

\begin{document}

\lstset{ %
  language=C,                                    % choose the language of the code
  basicstyle=\footnotesize\upshape\ttfamily,     % the size of the fonts that are used for the code
}

    \begin{example} 
      text text text
      \begin{lstlisting}
#include <stdio.h>

int main(void)
{
  int c;

  while ((c = getchar()) != EOF)
    putchar(c);
    return 0;
  }
      \end{lstlisting}
      text text text
    \end{example}
\end{document}

结果如您所愿,以直立的打字机字体显示了列表:

操作符完整示例的结果

相关内容