我在创建新环境时遇到了问题,无法将 放入lstlisting
中minipage
。我可以创建一个新环境来设置minipage
,然后在文档中将 放入lstlisting
中minipage
,但我无法创建同时执行这两项操作的环境。
\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}
我不确定这是否是你要找的...
(*) 不确定这是否有记录在案的事情还是肮脏的黑客行为......