Auflistung der Zeilennummern und Abbildungen

Auflistung der Zeilennummern und Abbildungen

Ich verwende listingsC, um es in einer figureUmgebung neben einem Diagramm zu setzen, und habe die Zahlen auf der linken Seite. Mein Problem ist, dass im two-columnModus 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 lstlistinginnerhalb des Textbereichs zu halten?

Antwort1

DerlistingsDer Code zum Schreiben der Zeilennummern ist in gespeichert \lst@PlaceNumber. Darunter numbers=leftist er wie folgt definiert:

\def\lst@PlaceNumber{\llap{\normalfont
  \lst@numberstyle{\thelstnumber}\kern\lst@numbersep}}%

was die Nummer als left over ausgibt lap, was die "Probleme" verursacht, die Sie erleben. Sie könnten einfach das gesamte lstlistingover verschieben, indem Siemindestensden obigen Betrag (sagen wir 1em+\lst@numbersep), damit die linke Überlappung noch innerhalb der Textblockgrenze liegt:

Bildbeschreibung hier eingeben

\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ügtshowframezum Hervorheben der Textblockgrenze und die [demo]Option zumgraphicxum 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@PlaceNumberentsprechend 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.

verwandte Informationen