Избегайте вставки пробела под заголовком раздела с aboveskip, belowskip в среде листинга

Избегайте вставки пробела под заголовком раздела с aboveskip, belowskip в среде листинга

Я использовал listingsпакет для размещения исходного кода в моем документе и заметил, что пространство между текстом и lstlistingокружением слишком мало. Поэтому я изменил свойства \aboveskipи \belowskip.

Проблема с этим была в том, что вместе с пространством, о котором я упоминал, это также затронуло пространство между заголовком раздела и lstlistingокружением, что бесполезно и раздражает. Также это не создает приятного внешнего вида документа.

Также я не знаю, происходит ли то же самое в пространстве между окружением и разрывами страниц или началом новой страницы (так ли это?) или LaTeX стирает это пространство самостоятельно (если оно там действительно вставлено).

Мой вопрос заключается в том, как можно предотвратить вставку пробелов \aboveskipи \belowskipповлиять на пробелы между заголовками разделов, разрывами страниц и началом страниц?

Это без \aboveskip:

введите описание изображения здесь

Это с \aboveskip=1.5cm(избыточное число, чтобы показать «ненужное» пространство под заголовком раздела):

введите описание изображения здесь

\documentclass[12pt]{article}

\usepackage{parskip}

\setlength{\parindent}{0cm}

\usepackage{fontspec}

\usepackage[english,greek]{babel}

\usepackage[fleqn]{amsmath}

\usepackage{unicode-math}

\usepackage{listings}

\setmainfont
[
  Ligatures=TeX,
  Extension=.otf,
  UprightFont=*,
  BoldFont=*Bold,
  ItalicFont=*It,
  BoldItalicFont=*BoldIt,
  Mapping=tex-text
]{GFSArtemisia}

\setsansfont[Mapping=tex-text]{GFSArtemisia.otf}

\setmathfont{latinmodern-math.otf}

\setmathfont[range=\varnothing]{Asana-Math.otf}

\setmathfont[range=\int]{latinmodern-math.otf}

\begin{document}

\lstset
{
    aboveskip=1.5cm,
    frame=tb,
    rulecolor=\color{black},
    basicstyle=\ttfamily\color{BrickRed},
    columns=flexible,
    morecomment=[s][\color{NavyBlue}]{/*}{*/}
}

\section*{Section Title}

\begin{lstlisting}

Source code here.

\end{lstlisting}

Text here!

\begin{lstlisting}

More source code here.

\end{lstlisting}

More text here!

\end{document}

решение1

Требование кажется немного странным, но в любом случае вы можете расширить значение до любого размера в зависимости от того, что вы хотите протестировать. Здесь я использую \if@nobreaktrueв качестве приближения «следовать заголовку» — это внутренний переключатель, который Latex использует для избежания разрывов страниц после заголовка.

\documentclass[12pt]{article}

\usepackage{parskip}

\setlength{\parindent}{0cm}

\usepackage{fontspec}

\usepackage[english,greek]{babel}

\usepackage[fleqn]{amsmath}

\usepackage{unicode-math}

\usepackage{listings}

\setmainfont
[
  Ligatures=TeX,
  Extension=.otf,
  UprightFont=*,
  BoldFont=*Bold,
  ItalicFont=*It,
  BoldItalicFont=*BoldIt,
  Mapping=tex-text
]{GFSArtemisia}

\setsansfont[Mapping=tex-text]{GFSArtemisia.otf}

\setmathfont{latinmodern-math.otf}

\setmathfont[range=\varnothing]{Asana-Math.otf}

\setmathfont[range=\int]{latinmodern-math.otf}

\begin{document}

\makeatletter
\lstset
{
    aboveskip={\if@nobreak 0pt\else 1.5cm\fi},
    frame=tb,
    rulecolor=\color{black},
    basicstyle=\ttfamily\color{BrickRed},
    columns=flexible,
    morecomment=[s][\color{NavyBlue}]{/*}{*/}
}
\makeatother
\section*{Section Title}

\begin{lstlisting}

Source code here.

\end{lstlisting}

Text here!

\begin{lstlisting}

More source code here.

\end{lstlisting}

More text here!

\end{document}

Связанный контент