我正在将为项目开发的一些代码从 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}