Ich verwende listings
C, um es in einer figure
Umgebung neben einem Diagramm zu setzen, und habe die Zahlen auf der linken Seite. Mein Problem ist, dass im two-column
Modus die Zeilennummern außerhalb des Textbereichs an der Stelle erscheinen, wo eigentlich der Rand sein sollte (d. h. die Zahlen werden nicht auf der linken Seite der Spalte ausgerichtet, sondern etwas links davon). Der Code, den ich verwende, ist:
\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*}
Gibt es eine Möglichkeit, die Zeilennummern lstlisting
innerhalb des Textbereichs zu halten?
Antwort1
Derlistings
Der Code zum Schreiben der Zeilennummern ist in gespeichert \lst@PlaceNumber
. Darunter numbers=left
ist er wie folgt definiert:
\def\lst@PlaceNumber{\llap{\normalfont
\lst@numberstyle{\thelstnumber}\kern\lst@numbersep}}%
was die Nummer als l
eft over ausgibt lap
, was die "Probleme" verursacht, die Sie erleben. Sie könnten einfach das gesamte lstlisting
over verschieben, indem Siemindestensden obigen Betrag (sagen wir 1em+\lst@numbersep
), damit die linke Überlappung noch innerhalb der Textblockgrenze liegt:
\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}
Ich habe hinzugefügtshowframe
zum Hervorheben der Textblockgrenze und die [demo]
Option zumgraphicx
um den MWE auszuführen. Sie werden in Ihrem endgültigen Dokument nicht benötigt.
Alternativ können Sie die Zahlen so einstellen, dass sie linksglobal(mithilfe von \lstset{numbers=left}
) und dann \lst@PlaceNumber
entsprechend neu definieren:
\makeatletter%
\def\lst@PlaceNumber{\makebox[\dimexpr 1em+\lst@numbersep][l]{\normalfont
\lst@numberstyle{\thelstnumber}}}%
\makeatother%
Die globale Einstellung ist erforderlich, damit die Neudefinition darüber hinaus bestehen bleibt \begin{lstlisting}
.
Antwort2
Ich denke, eine einfache Lösung könnte darin bestehen, die Einstellung in der Listing-Umgebung zu verwenden xleftmargin=...
. Sehen Sie sich die Listing-Dokumentation an.