如何在 lstlisting 中对齐代码?

如何在 lstlisting 中对齐代码?

我正在尝试学习老师提供的 TeX 文件。我设法使用以下命令将 C++ 文件链接到列表:

\lstset{language=C++,
    % numbers=left,
    %   stepnumber=1,
    numberstyle=\ttfamily,
    basicstyle=\ttfamily,
    keywordstyle=\color{blue}\ttfamily,
    stringstyle=\color{red}\ttfamily,
    commentstyle=\color{gray}\ttfamily,
    morecomment=[l][\color{magenta}]{\#}
}
\lstinputlisting[label={code},caption={\textit{Source code} program}, language={C}]{main.cpp}

我得到了:

这

我尝试使用lstlisting单独解释代码。我使用:

\begin{lstlisting}[label={code},caption={isiArray Function}, language={C}]
        
        void isiArray(int arr[],int *arrLength){
            int i;
            for(i=0;i<*arrLength;i++){
                cin>>arr[i];
            }
        }
    
    \end{lstlisting}

但我得到:

这

代码没有像上一个代码那样左对齐。为什么会出现这种情况?如何设置左对齐?

答案1

由于listings几乎是逐字设置的,因此它也会考虑空格,因此环境中整个代码块的缩进lstlisting将反映为输出的一部分。删除缩进或使用参数gobble删除一组初始空格。

在此处输入图片描述

\documentclass{article}

\usepackage{listings,lipsum}

\begin{document}

\sloppy\lipsum[1]

\begin{lstlisting}[caption={isiArray Function 1}, language={C}, basicstyle=\ttfamily]
        void isiArray(int arr[],int *arrLength){
          int i;
          for(i=0;i<*arrLength;i++){
            cin>>arr[i];
          }
        }
\end{lstlisting}

\begin{lstlisting}[gobble=8, caption={isiArray Function 2}, language={C}, basicstyle=\ttfamily]
        void isiArray(int arr[],int *arrLength){
          int i;
          for(i=0;i<*arrLength;i++){
            cin>>arr[i];
          }
        }
\end{lstlisting}

\begin{lstlisting}[caption={isiArray Function 3}, language={C}, basicstyle=\ttfamily]
void isiArray(int arr[],int *arrLength){
  int i;
  for(i=0;i<*arrLength;i++){
    cin>>arr[i];
  }
}
\end{lstlisting}

\end{document}

相关内容