목록 프레임 전후에 수평선 추가하기

목록 프레임 전후에 수평선 추가하기

hline목록이 있는데 목록 앞뒤에 을(를) 추가하고 싶습니다 . 스타일 매개변수를 사용하면 frames다음 두 가지 이유로 의도한 대로 작동하지 않습니다. 1. 왼쪽 막대를 번호 매기기 및 소스 코드의 구분 기호로 유지하고 싶습니다. 2. 프레임 상단/하단 라인과 왼쪽 라인 사이에 공간이 없습니다.

샘플 코드는

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

이는 우리에게 다음을 제공합니다.

여기에 이미지 설명을 입력하세요

하지만 나는 (GIMP 편집됨)처럼 프레임 너비뿐만 아니라 \hline전체를 채워야 하는 을 원합니다.\textwidth

여기에 이미지 설명을 입력하세요

간격과 선 너비는 김프 편집이므로 정확하지 않습니다. 아이디어는 table환경 에서 발견되는 것과 동일한 간격입니다 . 처럼:

여기에 이미지 설명을 입력하세요

답변1

여기에 이미지 설명을 입력하세요

tcolorbox나는 라인을 얻기 위해 패키지를 사용했습니다 . tmpbox필요에 맞게 환경 옵션을 수정할 수 있습니다 . 하지만 한 가지 문제가 있습니다. tmpbox와 를 통합하는 새로운 환경을 정의하는 것은 불가능하다고 생각합니다 lstlisting. 따라서 tmpbox매번 명시적으로 호출해야 합니다 .

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

관련 정보