在自定义列表环境中设置水平宽度

在自定义列表环境中设置水平宽度

我想创建一个自定义列表环境,并将其宽度设置为文本宽度的 90% 左右,居中。

佩安先前的问题对于算法,我尝试的第一件事是将列表嵌入到小页面环境中。然而,自定义列表环境必须通过\lstnewenvironment自定义列表环境必须通过命令。我找到了一种仍然可以使标准环境工作的方法,但它要求每次在结束环境之前使用 escape 命令。

我尝试的第二件事是后一个命令,但据我所知,它没有提供设置列表宽度或居中功能。

\documentclass{article}
\usepackage{listings}
\usepackage{lipsum}


\lstnewenvironment{queryl} %% APPROACH 1
 {\lstset{frame=shadowbox,escapechar=`}}
 {}

\newenvironment{query} %% APPROACH 2
 {\begin{minipage}{4cm}\centering\begin{queryl}}
 {\end{queryl}\end{minipage}}


\begin{document}
%% APPROACH 1
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus elit,
vestibulum ut, placerat ac, adipiscing vitae, felis.
\begin{queryl}
begin
{ do nothing }
end ;
\end{queryl}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus elit,
vestibulum ut, placerat ac, adipiscing vitae, felis.

%% APPROACH 2
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus elit,
vestibulum ut, placerat ac, adipiscing vitae, felis.

\begin{query}
begin
{ do nothing }
end ;`%<- needs escape-to-LaTeX character to work
\end{query}

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus elit,
vestibulum ut, placerat ac, adipiscing vitae, felis.
\end{document}

在此处输入图片描述

可以注意到,对于第一个环境,框架超出了文本的宽度。此外,令人费解的是minipage似乎不想居中并吞噬空间(虽然我想我可以也许至少经过修改就可以让它工作)。

无论如何,是否有人知道如何设置自定义列表环境的宽度并将其居中,而不需要每次都使用转义字符来结束环境?

答案1

您可以使用 指定宽度\lstset{linewidth=<length>}

要将其合并到您的自定义环境中:

\lstnewenvironment{queryl}
   {\lstset{frame=shadowbox,escapechar=`,linewidth=6cm}}
   {}

不过,我实际上建议您定义queryl环境以便能够接受可选的第一个参数,以防您需要在本地调整任何参数:

\lstnewenvironment{queryl}[1][] 
   {\lstset{frame=shadowbox,escapechar=`,linewidth=8cm, #1}}
   {}

现在当你使用它作为

\begin{queryl}
 ...
\end{queryl}

你会得到下面的第一张图片,但是

\begin{queryl}[linewidth=10cm]
 ...
\end{queryl}

你将获得第二个版本:

在此处输入图片描述

代码:

\documentclass{article}
\usepackage{listings}

\lstnewenvironment{queryl}[1][] 
 {\lstset{frame=shadowbox,escapechar=`,linewidth=8cm, #1}}
 {}

\begin{document}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus elit,
vestibulum ut, placerat ac, adipiscing vitae, felis.
\begin{queryl}
begin
{ listing with default line width }
end ;
\end{queryl}

\begin{queryl}[linewidth=10cm]
begin
{ listing with width adjust locally }
end ;
\end{queryl}
\end{document}

相关内容