清單行號和數字

清單行號和數字

我用來在圖表旁邊的環境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}}%

它將數字列印為left 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=...清單環境中的設定。查看清單文檔。

相關內容