清单行号和图

清单行号和图

我正在使用在图表旁边的环境listings中排版一些 C figure,并且左侧有数字。我的问题是在two-column模式下,行号出现在应该是边距的位置,在文本区域之外(即,数字没有与列的左侧对齐,而是略微偏向对齐的左侧)。我使用的代码是:

\begin{figure*}
  \begin{minipage}{.45\textwidth}
   \begin{lstlisting}[numbers=left]
    i = 0;
    j = 1;
   \end{lstlisting}
  \end{minipage}\hfill
  \begin{minipage}{.45\textwidth}
     \includegraphics{figure}
  \end{minipage}
 \caption{My caption}
 \label{fig:blah}
\end{figure*}

有没有办法保留lstlisting文本区域内的行号?

答案1

listings写入行号的代码存储在 中\lst@PlaceNumbernumbers=left其下定义为:

\def\lst@PlaceNumber{\llap{\normalfont
  \lst@numberstyle{\thelstnumber}\kern\lst@numbersep}}%

这会将数字打印为left over lap,从而导致您遇到的“问题”。您可以将整个lstlistingover推至少上述数量(例如1em+\lst@numbersep)允许左重叠仍然在文本块边界内:

在此处输入图片描述

\documentclass[twocolumn]{article}
\usepackage[demo]{graphicx}% http://ctan.org/pkg/graphicx
\usepackage{showframe}% http://ctan.org/pkg/showframe
\usepackage{listings}% http://ctan.org/pkg/listings
\begin{document}
\begin{figure*}
  \makeatletter%
  \hspace*{\dimexpr 1em+\lst@numbersep}%
  \makeatother%
\begin{minipage}{.4\textwidth}
\begin{lstlisting}[numbers=left]
i = 0;
j = 1;
\end{lstlisting}
  \end{minipage}\hfill
  \begin{minipage}{.4\textwidth}
     \includegraphics{figure}
  \end{minipage}
 \caption{My caption}
 \label{fig:blah}
\end{figure*}
\end{document}

我已经添加showframe突出显示文本块边界,以及[demo]选项graphicx以便运行 MWE。最终文档中不需要它们。

或者,你可以设置左侧显示的数字全球(使用\lstset{numbers=left}),然后\lst@PlaceNumber相应地重新定义:

\makeatletter%
\def\lst@PlaceNumber{\makebox[\dimexpr 1em+\lst@numbersep][l]{\normalfont
  \lst@numberstyle{\thelstnumber}}}%
\makeatother%

需要全局设置才能使重新定义持续到之后\begin{lstlisting}

答案2

我猜一个简单的解决方案可能是使用xleftmargin=...listings 环境中的设置。请查看 listings 文档。

相关内容