リストの行番号と数字

リストの行番号と数字

私は環境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、あなたが経験する「問題」を引き起こします。lstlisting次のようにして、over全体をプッシュするだけで済みます。少なくとも上記の量(たとえば、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]オプションと、graphicxMWE を実行するために必要です。最終文書では必要ありません。

あるいは、数字を左に表示するように設定することもできます世界的に( を使用\lstset{numbers=left}) し、それ\lst@PlaceNumberに応じて再定義します。

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

再定義を を超えて継続させるには、グローバル設定が必要です\begin{lstlisting}

答え2

簡単な解決策としては、xleftmargin=...。リストのドキュメントをご覧ください。

関連情報