我用來在圖表旁邊的環境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
過去至少上述數量(例如,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=...
清單環境中的設定。查看清單文檔。