Hinzufügen horizontaler Linien vor und nach dem Listenrahmen

Hinzufügen horizontaler Linien vor und nach dem Listenrahmen

Ich habe eine Auflistung und möchte hlinevor und nach der Auflistung ein Element hinzufügen. Die Verwendung des framesStilparameters funktioniert aus zwei Gründen nicht wie vorgesehen: 1. Ich möchte einen linken Balken als Trennzeichen von der Nummerierung und dem Quellcode beibehalten; und 2. Zwischen der oberen/unteren Rahmenlinie und der linken Linie ist kein Leerzeichen.

Der Beispielcode ist

\documentclass{article}
\usepackage{listings}
\usepackage{lipsum}

\lstdefinestyle{CEE}{language=C, frame=l,  numbers=left,  numbersep=1em,  xleftmargin=2em} 

\begin{document}

\lipsum[1]

\begin{lstlisting}[style=CEE, caption={Hello world}]
#include <stdio.h>

int main(int argc, char *argv[])
{
    printf("Hello world\n");
    return 0;
}
\end{lstlisting}

\lipsum[2]
\end{document}

Das gibt uns:

Bildbeschreibung hier eingeben

Ich wünsche mir aber eins, \hlinedas den gesamten Rahmen ausfüllt \textwidthund nicht nur die Breite des Rahmens, wie in (GIMP Edited)

Bildbeschreibung hier eingeben

Beachten Sie, dass Abstand und Linienbreite nicht korrekt sind, da es sich nur um eine Gimp-Bearbeitung handelt. Die Idee ist, dass der Abstand in der tableUmgebung gleich ist. Wie:

Bildbeschreibung hier eingeben

Antwort1

Bildbeschreibung hier eingeben

Ich habe das Paket verwendet, tcolorboxum die Zeilen zu erhalten. Sie können die Optionen der Umgebung tmpboxIhren Bedürfnissen entsprechend ändern. Es gibt jedoch ein Problem; ich glaube nicht, dass es möglich ist, eine neue Umgebung zu definieren, die die tmpboxund die zusammenfügt lstlisting. Sie müssen also tmpboxjedes Mal explizit aufrufen.

\documentclass[11pt, a4paper]{article}
\usepackage{geometry}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{tcolorbox}
\tcbuselibrary{skins,breakable}

\newenvironment{tmpbox}{%
  \tcolorbox[%
  empty,
  parbox=false,
  noparskip,
  enhanced,
  breakable,
  frame hidden,
  boxrule=0pt,
  colback=white,
  left=-.5ex, % right=-4pt,
  before skip=.1ex plus 2pt,
  after skip=1ex plus 2pt,
  overlay unbroken and last={%
    \draw ($(frame.north west)+(0, -6ex)$)
    -- +(1\textwidth, 0);
    \draw ($(frame.south west)+(0, 2ex)$)
    -- +(1\textwidth, 0);    
  }]
}{\endtcolorbox}

\usepackage{listings}
\lstdefinestyle{CEE}{%
  frame=l, language=C, numbers=left, numbersep=1em, xleftmargin=2em
}

\usepackage{lipsum}

\begin{document}
\begin{center}\large\bfseries
  Adding horizontal lines about listings
\end{center}


% See \verb|https://en.wikibooks.org/wiki/LaTeX/Source_Code_Listings|.

\lipsum[1]

\begin{tmpbox}
  \begin{lstlisting}[style=CEE, caption={Hello world with hlines}]
  #include <stdio.h>
  int main(int argc, char *argv[])
  {
    printf("Hello world\n");
    return 0;
  }
\end{lstlisting}
\end{tmpbox}

\lipsum[3]

\begin{lstlisting}[style=CEE, caption={Hello world}]
  #include <stdio.h>
  int main(int argc, char *argv[])
  {
    printf("Hello world\n");
    return 0;
  }
\end{lstlisting}

\lipsum[4]
\end{document}

verwandte Informationen