Das Einfügen einer Listenliste in eine Miniseite führt zu Problemen mit den xleftmargin-Einstellungen

Das Einfügen einer Listenliste in eine Miniseite führt zu Problemen mit den xleftmargin-Einstellungen

Ich möchte eine Auflistung in einem grauen Feld mit etwas Platz an den Seiten anzeigen. Ich habe es so
eingerichtet, wie ich es möchte:\lstset

\lstset{basicstyle=\ttfamily,keywordstyle=\bfseries
,commentstyle=\itshape\color{green},
xleftmargin=\parindent,  <<--- minipage breaks this setting.
backgroundcolor=\color{light-gray},
framexleftmargin=\parindent,
framextopmargin=6pt,
framexbottommargin=6pt, 
frame=tb, framerule=0pt}

Ich möchte keine Seitenumbrüche in kurzen Auflistungen. Ich behebe dies mithilfe einer Miniseite. Dadurch werden jedoch meine Randeinstellungen zerstört.

\documentclass[]{article}
\usepackage{float}
\usepackage{listings} 
\usepackage{color}
\usepackage[margin=1in]{geometry}
%\usepackage{fontspec}
%\setmonofont{Bitstream Vera Sans Mono}[Scale=0.85]
\definecolor{light-gray}{gray}{0.95}
\definecolor{darkgreen}{RGB}{0,64,0}
\lstset{basicstyle=\ttfamily,keywordstyle=\bfseries,commentstyle=\itshape    \color{darkgreen}, xleftmargin=\parindent,backgroundcolor=\color{light-gray},
framexleftmargin=\parindent,
framextopmargin=6pt,
framexbottommargin=6pt, 
frame=tb, framerule=0pt}
\begin{document}
\section{listing}
\noindent
\begin{minipage}[H]{\linewidth}
\begin{lstlisting}[language=Delphi,caption={get the next block},label={ref:bitset_next},
                   keywords={function,int,asm,end},xleftmargin=\parindent]
function bitset.next(previous_block_index: int): int;
//***************************************************************************
//pseudo code:
//***************************************************************************
//Load the bitset into a register
//shift out the bits that we've already processed
//count the number of inactive blocks
//next_block_index = previous_block_index + inactive_blocks_inbetween + 1
asm
  //rcx = self = pointer to bitset
  //edx = previous_block_index
  mov rax,[rcx]            //rax = bitset.
  lea ecx,[edx+1]          //go to the next bit    
  shr rax,cl               //shift out the bits we've already processed
  tzcnt rax,rax            //count empty positions to skip
  add eax,ecx              //return (prev+1+empty positions found)
end;  
\end{lstlisting}
\end{minipage}
\end{document}

Dies erzeugt die folgende Ausgabe:

Bildbeschreibung hier eingeben

Wenn ich das \noindentund das entferne minipage, sieht es so aus.

Bildbeschreibung hier eingeben

Das hat die richtige Einrückung innerhalb der Auflistung. Wie erreiche ich, dass die Auflistung keinen Seitenumbruch hat, aber den richtigen Abstand innerhalb des grauen Felds beibehält?

ich habe es versucht

\begin{lstlisting}[float,floatplacement=H]

Das Ergebnis ist jedoch dasselbe wie minipageoben.

Antwort1

Danke an @egreg. Ich habe die Antwort hier gefunden:So bewahren Sie denselben Parskip in der Minipage auf

Durch einfaches Kopieren und Einfügen der oben verlinkten Antwort entsteht ein grauer Hintergrund, der über den restlichen Text hinausgeht, sodass einige Anpassungen erforderlich sind.

\parindentDie Lösung besteht darin, eine neue -feste- Länge zu definieren, die die Variable innerhalb ersetzt minipage.

Die folgende Änderung behebt das Problem:

\newlength{\listingindent}                %declare a new length
\setlength{\listingindent}{\parindent}    %make it a fixed version of \parindent
\lstset{basicstyle=\ttfamily,keywordstyle=\bfseries,commentstyle=\itshape\color{darkgreen},backgroundcolor=\color{light-gray},
xleftmargin=\listingindent,         <<-- make fixed 
framexleftmargin=\listingindent,    <<-- make fixed
framextopmargin=6pt,
framexbottommargin=6pt, 
frame=tlrb, framerule=0pt,linewidth=\linewidth}
....
\noindent      <<-- force noident, or the frame will appear out of bounds
\begin{minipage}[H]{\linewidth}
\begin{lstlisting}[language=Delphi,caption={get the next block},label={ref:bitset_next},
                   keywords={function,int,asm,end}]
function bitset.next(previous_block_index: int): int;
...
\end{lstlisting}
\end{minipage}

Jetzt sieht es so aus:

Bildbeschreibung hier eingeben

Keine Seitenumbrüche mitten in einer Auflistung und kein falsch ausgerichteter Hintergrund.

verwandte Informationen