私は環境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@PlaceNumber
。numbers=left
その下では次のように定義されています。
\def\lst@PlaceNumber{\llap{\normalfont
\lst@numberstyle{\thelstnumber}\kern\lst@numbersep}}%
これは数字をl
eft 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]
オプションと、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=...
。リストのドキュメントをご覧ください。