在 LaTeX 中正确格式化代码

在 LaTeX 中正确格式化代码

我正在将为项目开发的一些代码从 Visual Studio 2019 粘贴到 LaTeX 以生成报告,但粘贴后水平间距太大并超出页面范围。目前我正在使用 lstlisting 环境:

LaTeX代码如下:

\begin{lstlisting}
for (int i = 0; i < numBuses; i++) {
            for (int h = 0; h < maxRoute; h++) {
                for (int j = 0; j < numStops; j++) {
                    for (int k = 0; k < numStops; k++) {
                        if (j == k) {
                            GRBLinExpr lhs = 0;
                            lhs += X[i][h][j][k];
                            basicModel.addConstr(lhs == 0);
                        }
                    }
                }
            }
        }
\end{lstlisting}

虽然我可以手动编辑此问题,但代码有数百行,因此这似乎不切实际。请注意,间距变得太大。有人可以提供任何有关如何解决此问题的建议吗?提前谢谢 =)

答案1

正如@Werner 在他的评论中提到的,tabsize如果您在源代码中使用制表符,则可以用它来调整缩进。

但是,一种更强大的解决方案(适用于制表符和空格)是使用包formats的功能listings。它允许您定义自定义格式规则。对于您的情况,像下面这样简单的事情就足够了:

\lstdefineformat{C}{%
\{=\space\string\newline\indent,%
\}=\newline\noindent\string\newline%
}

第一行表示每当我们看到一个开括号时{,我们应该在它前面放一个空格,然后打印它,然后放置一个换行符,最后缩进。

第二行表示每当我们看到右括号时},我们应该在它前面放置一个换行符,删除缩进,然后打印它,最后打印一个换行符。

您可以阅读第 5.6 节软件包listings文档有关如何使用的更多详细信息lstdefineformat


完整工作示例为:

\documentclass[en,12pt]{article}

\usepackage[formats]{listings}

\lstdefineformat{C}{%
\{=\space\string\newline\indent,%
\}=[;]\newline\noindent\string\newline%
}

\begin{document}

\begin{lstlisting}[language=C,format=C]
for (int i = 0; i < numBuses; i++) {
            for (int h = 0; h < maxRoute; h++) {
                for (int j = 0; j < numStops; j++) {
                    for (int k = 0; k < numStops; k++) {
                        if (j == k) {
                            GRBLinExpr lhs = 0;
                            lhs += X[i][h][j][k];
                            basicModel.addConstr(lhs == 0);
                        }
                    }
                }
            }
        }
\end{lstlisting}

\end{document}

截屏

相关内容