我正尝试在lstlisting
如下环境中获取“标记”框架:
顶部和底部的框架很容易实现:
\begin{lstlisting}[frame=tb]
Code
Code
Code
\end{lstlisting}
但仔细阅读了列表文档后,我不确定如何在底部和顶部框架上实现“一些文本”标签(似乎不支持这种功能)。
我已经研究过其他可选软件包,比如mdframed
和fancyvrb
。fancyvrb
它们接近我想要的,但从我所能提供的选项来看,它们只允许“某些文本”标签居中对齐,即:
另外,还有一点要考虑:我已经为我的语言找到了一个很好的(并且可行的)风格定义,所以如果对此的任何解决方案仍然可以使用(从而可以使用我的语言定义),lst
那就太好了。lstlisting
答案1
tcolorbox
带有其库的版本listings
(这是我实现它的第一个想法)
overlay
可以通过样式或更改部分代码来改变外观。
\documentclass{article}
\usepackage[most]{tcolorbox}
\makeatletter
\newtcblisting[auto counter]{somecode}[2][]{%
enhanced jigsaw,
boxrule=0pt,
toprule=1pt,
bottomrule=1pt,
listing options={language={C}},
listing only,
colback=white,
sharp corners,
overlay={\node[inner sep=2pt,xshift=-2cm,fill=tcbcol@back] (A) at (frame.south east) {#2};
\node[inner sep=2pt,xshift=+2cm,fill=tcbcol@back] (B) at (frame.north west) {#2};
},
#1,
}
\makeatother
\begin{document}
\begin{somecode}{Some Text}
int main
\end{somecode}
\begin{somecode}[colback=yellow!10!white]{Some Text}
int main
\end{somecode}
\end{document}