
У меня есть листинг, и я хотел бы добавить 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}
Это дает нам:
Но я хочу, чтобы \hline
это заполняло всю область \textwidth
, а не только ширину кадра, как в (отредактировано GIMP)
Обратите внимание, что интервал и ширина линии неверны, так как это всего лишь редактирование в gimp. Идея в том же интервале, что и в table
environment. Как:
решение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}