Я использую 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
Thelistings
Код для записи номеров строк хранится в \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=...
настройки в среде листингов. Взгляните на документацию листингов.