Agregar líneas horizontales antes y después del marco de listados

Agregar líneas horizontales antes y después del marco de listados

Tengo un listado y me gustaría agregar un hlineantes y un después del listado. El uso del framesparámetro de estilo no funciona según lo previsto por dos razones: 1. Quiero mantener una barra izquierda como separador de la numeración y el código fuente; y 2. No hay espacio entre la línea superior/inferior del marco y la izquierda.

El código de muestra es

\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}

Eso nos da:

ingrese la descripción de la imagen aquí

Pero deseo \hlineque llene todo el \textwidthancho del marco, no solo el ancho del marco, como en (GIMP editado)

ingrese la descripción de la imagen aquí

Preste atención a que el espaciado y el ancho de línea no son correctos ya que es solo una edición gimp. La idea es el mismo espacio que se encuentra en tableel medio ambiente. Como:

ingrese la descripción de la imagen aquí

Respuesta1

ingrese la descripción de la imagen aquí

Usé el paquete tcolorboxpara obtener las líneas. Puede modificar las opciones del entorno tmpboxpara adaptarlas a sus necesidades. Sin embargo, hay un problema; No creo que sea posible definir un nuevo entorno que reúna el tmpboxy el lstlisting. Entonces tienes que llamar tmpboxcada vez explícitamente.

\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}

información relacionada