在下面的平均能量损失,我尝试通过来自包的宏对和将一个lstlisting
环境(testlst
)包装到另一个环境( ) 。test
\BeforeBeginEnvironment
\AfterEndEnvironment
etoolbox
虽然运行时没有错误,但\vrule
代码中的两个都不起作用(画垂直线)。为什么?
梅威瑟:
\documentclass{article}
\usepackage{geometry}
\geometry{showframe}
\usepackage{listings,xparse,etoolbox}
\parindent0pt
\begin{document}
% -------------------------
\newenvironment{test}[1]
{\begin{minipage}{#1}}
{\end{minipage}}
% -------------------------
\lstnewenvironment{testlst}[2][]
{
\BeforeBeginEnvironment{testlst}{\vrule\begin{test}{#2}}
\lstset{#1}
}
{
\AfterEndEnvironment{test}{\end{minipage}\vrule}
}
% -------------------------
% Test:
\begin{testlst}[numbers=left]{5in}
\rule{2in}{10pt}
\end{testlst}
% -------------------------
\end{document}
答案1
这行不通。您首先要定义一个环境,然后可能还要声明\BeforeBeginEnvironment
和\AfterEndEnvironment
。
但没有必要,因为你正在定义环境。
\documentclass{article}
\usepackage{geometry}
%\geometry{showframe}
\usepackage{listings}
\usepackage{lipsum}
\lstnewenvironment{testlst}[2][]
{
\trivlist\item\relax\vrule\minipage{#2}
\lstset{#1}
}
{
\endminipage\vrule\endtrivlist
}
\begin{document}
\lipsum[1][1-5]
\begin{testlst}[numbers=left]{5in}
\rule{2in}{10pt}
\rule{2in}{10pt}
\rule{2in}{10pt}
\end{testlst}
\lipsum[2][1-5]
\end{document}
请注意,您需要使用环境的“裸”形式,因为lstnewenvironment
它是一种逐字记录。