我正在尝试在 scrartlc 中的列表中写入一行代码。问题是列表和下面的文本之间的空间太大。
使用 Scrartlc 时的样子:
\documentclass[parskip=full]{scrartlc}
更改为 后的样子如下\documentclass{article}
:
我想得到与 相同的结果,article
但使用scrartlc
。我该如何得到这样的结果?
这是我的代码:
\documentclass[parskip=full]{scrartcl}
\usepackage{listings}
\usepackage[dvipsnames]{xcolor}
\lstdefinestyle{customjava}{
language=Java,
keywordstyle=\bfseries\color{green!40!black},
\lstset{escapechar=@, style=customjava}
}
\begin{document}
test
\begin{lstlisting}
public int a;
\end{lstlisting}
test
\end{document}
答案1
额外的垂直空间来自选项。如果您使用带有包的parskip
标准类,您将遇到类似的问题。article
\parskip
如果你不想删除选项parskip=full
,那么你可以使用
\usepackage{etoolbox}
\newlength\savedparskip
\BeforeBeginEnvironment{lstlisting}{\setlength\savedparskip{\parskip}}
\lstset{belowskip=\dimexpr-\savedparskip+\medskipamount\relax}
代码:
\documentclass[
parskip=full
]{scrartcl}
\usepackage{listings}
\usepackage[dvipsnames]{xcolor}
\lstdefinestyle{customjava}{
language=Java,
keywordstyle=\bfseries\color{green!40!black}
}
\lstset{escapechar=@, style=customjava}
\usepackage{etoolbox}
\newlength\savedparskip
\BeforeBeginEnvironment{lstlisting}{\setlength\savedparskip{\parskip}}
\lstset{belowskip=\dimexpr-\savedparskip+\medskipamount\relax}
\begin{document}
test
\begin{lstlisting}
public int a;
\end{lstlisting}
test
\end{document}
答案2
您可以使用自定义设置定义一个或多个 lstenvironments。
\documentclass[parskip=full]{scrartcl}
\usepackage{listings}
\usepackage[dvipsnames]{xcolor}
\makeatletter
\lstnewenvironment{rmlisting}
{\lstset{escapechar=@, language=Java,
showspaces=false,
showtabs=false,
breaklines=true,
showstringspaces=false,
breakatwhitespace=true,
commentstyle=\color{DarkBlue},
keywordstyle=\color{Green},
stringstyle=\color{Purpple}}
}
{
\vspace*{-12pt}
}
\makeatother
\begin{document}
test
\begin{lstlisting}
public int a;
\end{lstlisting}
test
test
\begin{rmlisting}
public int a; @%and here your comment etc@
\end{rmlisting}
test
\end{document}
点击这里查看其工作原理