Latex:在 lstlisting 中仅显示几行

发布于 2024-09-10 08:58:25 字数 956 浏览 4 评论 0原文

为了仅显示几行源代码,lstlisting 有一个 linerange 键,它仅打印这些范围。

\documentclass[slidestop]{beamer}
\usepackage{listings}
\begin{document}


\begin{frame}[fragile]
  \begin{lstlisting}[language=C,linerange={1-2,5-6}]
    #include<stdio.h>
    int void main(int argc, char **argv)
    {
      printf("hello world\n");
      return 0;
    }
  \end{lstlisting}
\end{frame}

\end{document}

上面的清单显示了以下代码行,行之间没有任何空格。 :

    #include<stdio.h>
    int void main(int argc, char **argv)
      return 0;
    }

我真正想要的是

    #include<stdio.h>
    int void main(int argc, char **argv)


      return 0;
    }

我不希望显示第 3-4 行,但我需要该范围的空行。因此,前两行和最后两行显示之间应该有 2 个空行。

约束:

  • 源代码不应更改,它 实际上是在一个单独的文件中 无法更改

  • 我拥有的实际源代码是 相当大,所以使用多个 lst列出不同部分 源码很麻烦。

[更新]: 我的要求简而言之: “源代码中排除在给定范围内的行应打印为空行(即使它们在源代码中非空)”

For displaying only few lines of source code lstlisting has a linerange key which prints only those ranges.

\documentclass[slidestop]{beamer}
\usepackage{listings}
\begin{document}


\begin{frame}[fragile]
  \begin{lstlisting}[language=C,linerange={1-2,5-6}]
    #include<stdio.h>
    int void main(int argc, char **argv)
    {
      printf("hello world\n");
      return 0;
    }
  \end{lstlisting}
\end{frame}

\end{document}

The above listing displays following lines of code without any spaces in between the lines. :

    #include<stdio.h>
    int void main(int argc, char **argv)
      return 0;
    }

What I really want is

    #include<stdio.h>
    int void main(int argc, char **argv)


      return 0;
    }

I want the lines 3-4 not to be displayed but I need blank lines for that range. So there should be 2 blank lines between first two and last two displayed lines.

Constraints:

  • Source code should not be changed, it
    is actually in a separate file which
    can't be changed

  • The actual source code I have is
    pretty big so using multiple
    lstlisting for different parts of
    source is cumbersome.

[Update]:
My requirement in short:
"lines in source code which are excluded in given range(s) should be printed as blank lines(even when they are non empty in source code)"

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

怀念你的温柔 2024-09-17 08:58:25

在序言中插入以下代码似乎可以解决问题。

\makeatletter
\let\oldMSkipToFirst=\lst@MSkipToFirst
\gdef\lst@MSkipToFirst{\lst@formfeed\oldMSkipToFirst}
\makeatother

Inserting the following piece of code in the preamble seems to do the trick.

\makeatletter
\let\oldMSkipToFirst=\lst@MSkipToFirst
\gdef\lst@MSkipToFirst{\lst@formfeed\oldMSkipToFirst}
\makeatother
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文