如何将列表放入小页面中

如何将列表放入小页面中

我在创建新环境时遇到了问题,无法将 放入lstlistingminipage。我可以创建一个新环境来设置minipage,然后在文档中将 放入lstlistingminipage,但我无法创建同时执行这两项操作的环境。

\documentclass{article}    
\usepackage{listings}    
\lstset{language=SQL,keywordstyle=\underbar,numbers=none}
\newenvironment{egdlisting}%
  {\hfill\begin{minipage}{\dimexpr\textwidth-2em}}%
  {\end{minipage}}

\begin{document}

\begin{egdlisting}
\begin{lstlisting}
select *
  from foo
 where bar = 4;
\end{lstlisting}
\end{egdlisting}

\end{document}

可以工作。显然,下一步,将 放入lstlisting环境内部,却不行。

\documentclass{article}
\usepackage{listings}
\lstset{language=SQL,keywordstyle=\underbar,numbers=none}
\newenvironment{egdlisting}%
  {\hfill\begin{minipage}{\dimexpr\textwidth-2em}\begin{lstlisting}}%
  {\end{lstlisting}\end{minipage}}

\begin{document}

\begin{egdlisting}
select *
  from foo
 where bar = 4;
\end{egdlisting}

\end{document}

错误信息(为了识别目的而显示)如下。

$ lualatex tex/sm.tex >& build.log

给我

This is LuaHBTeX, Version 1.12.0 (TeX Live 2020/Cygwin)
 restricted system commands enabled.
(./tex/sm.tex
LaTeX2e <2020-02-02> patch level 5
 L3 programming layer <2020-03-06>
(/usr/share/texmf-dist/tex/latex/base/article.cls
Document Class: article 2019/12/20 v1.4l Standard LaTeX document class
(/usr/share/texmf-dist/tex/latex/base/size10.clo))
(/usr/share/texmf-dist/tex/latex/listings/listings.sty
(/usr/share/texmf-dist/tex/latex/graphics/keyval.sty)
(/usr/share/texmf-dist/tex/latex/listings/lstmisc.sty)
(/usr/share/texmf-dist/tex/latex/listings/listings.cfg))
(/usr/share/texmf-dist/tex/latex/listings/lstlang1.sty)
(/usr/share/texmf-dist/tex/latex/l3backend/l3backend-pdfmode.def)
(./WORK/sm/sm.aux) (/usr/share/texmf-dist/tex/latex/base/ts1cmr.fd))
*

更新包文档的第 4.5 节listings具体\lstnewenvironment解决了这个问题……但您必须使用不同的语法minipage

\documentclass{article}
\usepackage{listings}
\usepackage{lipsum} % provide text around listings, to show indent
\lstset{numbers=none}
\lstnewenvironment{newlisting}{\hfill\minipage{\dimexpr\textwidth-1cm}}{\endminipage}

\begin{document}
\lipsum[1]

\begin{newlisting}
select *
  from foo
 where bar = 4;
\end{newlisting}

\lstset{numbers=left}

\begin{newlisting}
select *
  from foo
 where bar = 4;
\end{newlisting}

\lipsum[2]
\end{document}

给了我我想要的输出。

除了使用正确的命令()之外,关键的\lstnewenvironment不是使用\begin{minipage}{width} ... \end{minipage},而是使用\minipage{width} ... \endminipage

答案1

阅读文档第 43 页,并使用替换 (*) 的\begin{env}...\end{env}技巧\env ... \endenv

\documentclass{article}
\usepackage{listings}
\lstset{language=SQL,keywordstyle=\underbar,numbers=none}

\lstnewenvironment{egdlisting}
{\minipage{\dimexpr\textwidth-2em}}
{\endminipage}


\begin{document}

\begin{egdlisting}
select *
  from foo
 where bar = 4;
\end{egdlisting}

\end{document}

在此处输入图片描述

我不确定这是否是你要找的...


(*) 不确定这是否有记录在案的事情还是肮脏的黑客行为......

相关内容