这是我的第一个问题,因此请随意以任何方式纠正。
我正在努力解决以下问题:使用environment in a \newcommand
。
\describe
我想这样 定义命令:(它需要一个 bash 命令名称(#1)、一个使用它的示例(#2)和一个描述(#3))。
\newcommand{\describe}[3]{
\subsection*{#1}
\begin{lstlisting}
#2
\end{lstlisting}
{\colorbox{gray}{#1}\ #3}
}
我唯一得到的是
"no legal \end found"
错误。
所以我的问题是:有没有办法在新命令中使用环境?
答案1
与\newcommand
逐字内容环境不能一起工作(不用多说)并且我的方法并不总是有效。
逐字环境例如lstlisting
需要一个明确的终点,逐字内容在此停止并且通常的内容LaTeX
(即扩展)应该继续。这可以通过\scantokens{...}
提供\end{tcblisting}
此处作为结束标记来实现。
我决定使用tcolorbox
及其列表选项,因为显然涉及到颜色框。
的配置选项有很多tcolorbox
,我在这里仅限于主要功能(以及与 结合使用的专门列表环境xparse
)。
该xparse
包允许提供v
仅作为现状的逐字论据。
\documentclass{article}
\usepackage{xcolor}
\usepackage{xparse}
\usepackage[most]{tcolorbox}
\begin{document}
\NewDocumentCommand{\describe}{O{}+m+v+m}{%
\scantokens{%
\begin{tcblisting}{enhanced,
before={\subsection*{#2}},
title={#4},
listing only,
colback={white!80!black},
sharp corners,
colbacktitle={white!60!black},
boxrule=1pt,
left=5pt,
#1}
#3
\end{tcblisting}
}%
}
\describe{My command}{ls -ltr}{Foo}
\describe[colback=green!40!white]{Another command}{pdflatex thisniceexample}{Do you like what you see?}
\end{document}