如何将列表中的背景颜色裁剪为代码中最长的行?

如何将列表中的背景颜色裁剪为代码中最长的行?

列表包允许将背景颜色添加到代码列表中。问题是背景颜色的范围与代码列表所在的文本区域一样大。如果代码宽度较短,但其所在的区域较大,则可能会使其看起来很丑陋。这是 MWE

\documentclass[11pt]{article}
\usepackage[T1]{fontenc}
\usepackage{color}
\usepackage{listings}
\definecolor{bg}{RGB}{240,240,240}

\begin{document}    
\begin{tabular}{|p{0.8\textwidth}|p{.2\textwidth}|}\hline
\begin{lstlisting}[language=Mathematica,backgroundcolor=\color{bg}]
f[x_] := Sin[x];
Plot[f[x],{x,-Pi,Pi}]
\end{lstlisting}
&
plot command
\\\hline
\end{tabular}
\end{document}

给出了

Mathematica 图形

我想要的是这个

Mathematica 图形

(附言:我使用我高度发达的paint.exe技能手动完成了上述操作)。

问题在于人们不知道代码的“宽度”有多大,因此可能在minipage代码周围放置一个特定宽度的元素或者一个框架或者其他技巧来限制代码的区域。

有什么技巧可以帮助解决这个问题吗?

Latex 是否有命令可以查找列表中最长行的长度?如果是这样,那么就可以使用这个长度(加上一点点)来制作一个框架或小页面。

答案1

您可以使用tcblisting来自tcolorbox包装。使用hboxkey 时,其大小将根据内容的尺寸确定。

\documentclass[11pt]{article}
\usepackage[T1]{fontenc}
\usepackage{color}
\usepackage{listings}
\usepackage{tcolorbox}
\tcbuselibrary{listings}
\definecolor{bg}{RGB}{240,240,240}

\begin{document}

\begin{tabular}{|p{0.8\textwidth}|p{.2\textwidth}|}\hline
\begin{lstlisting}[language=Mathematica,backgroundcolor=\color{bg}]
f[x_] := Sin[x];
Plot[f[x],{x,-Pi,Pi}]
\end{lstlisting}
&
plot command
\\\hline
\end{tabular}

\begin{tabular}{|p{0.8\textwidth}|p{.2\textwidth}|}\hline
\begin{tcblisting}{colback=bg,size=minimal,hbox,listing only,listing options={language=Mathematica}}
f[x_] := Sin[x];
Plot[f[x],{x,-Pi,Pi}]
\end{tcblisting}
&
plot command
\\\hline
\end{tabular}

\end{document}

打印 pdf 的屏幕截图

相关内容