我已经使用\newcommand
基于 TikZ 创建了一个框,名为“mybox”。方程式可轻松插入其中。但我想\lstlisting
在其中插入一个环境。但它不起作用。我该怎么做?这是我的代码:
\documentclass{minimal}
\usepackage{times}
\usepackage{tikz}
\usepackage{listings}
\newcommand*\mybox[1]{\centering\tikz{\node [text width=15cm,rounded corners,fill=orange!50,inner sep=0.5ex,midway](char){#1};}}
\begin{document}
\mybox{
\begin{equation}
\int_S \mathbf{B}\cdot d\mathbf{s}
\end{equation}
}
\mybox{
\begin{lstlisting}[frame=single,language=PHP,caption=Php info\label{php_info}]
<?php
phpinfo();
?>
\end{lstlisting}
}
\end{document}
答案1
在这种情况下,我建议你使用tcolorbox
包来创建彩色框架;该包提供了listings
库和tcblisting
环境,让您可以使用包中的功能listings
:
\documentclass{article}
\usepackage{tikz}
\usepackage[listings]{tcolorbox}
\newcommand*\mybox[1]{\centering\tikz{\node [text width=15cm,rounded corners,fill=orange!50,inner sep=0.5ex,midway](char){#1};}}
\begin{document}
\mybox{%
\begin{equation}
\int_S \mathbf{B}\cdot d\mathbf{s}
\end{equation}%
}
\begin{tcblisting}{listing only,listing options={frame=single,language=PHP,caption=Php info,label={php_info}},
colback=orange!50,boxrule=0pt,width=\dimexpr15cm+1ex\relax}
<?php
phpinfo();
?>
\end{tcblisting}
\end{document}
如果要多次使用此构造,最好使用\newtcblisting
预定义选项来定义环境;类似这样的操作(环境的可选参数lisbox
允许将附加选项传递给列表选项)
\documentclass{article}
\usepackage{tikz}
\usepackage[listings]{tcolorbox}
\newtcblisting{lisbox}[1][]{%
listing only,
listing options={frame=single,language=PHP,#1},
colback=orange!50,
boxrule=0pt,
width=15cm}
\begin{document}
\begin{lisbox}[caption=Php info,label={php_info}]
<?php
phpinfo();
?>
\end{lisbox}
\end{document}