나는 다이어그램 옆의 환경 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=...
목록 환경에서 설정을 사용하는 것일 수 있다고 생각합니다. 목록 문서를 살펴보세요.