tcolorbox tcblisting 里面的方框文字?

tcolorbox tcblisting 里面的方框文字?

我正在编写一个包含大量编程片段的文本,我已将其放入使用 tcolorbox/tcblisting 的环境中:

\usepackage[pdftex]{xcolor}
\definecolor{vlgray}{gray}{0.9}
\definecolor{lgray}{gray}{0.7}

\usepackage{tcolorbox,fancyvrb}
\tcbuselibrary{skins,breakable,listings,breakable}

\newenvironment{shk}{%
  \tcblisting{listing only,colback=vlgray,colframe=vlgray,enlarge
  top by=0mm,top=-2mm,bottom=2mm,enhanced,
  after={\par\vspace{0.5\baselineskip}\noindent},
  overlay={\node[draw,fill= black,yshift=4pt,xshift=-10pt,left,text=white,
         anchor=east,font=\footnotesize\bfseries] at (frame.south east)
         {Shakespeare};}, 
  listing options={basicstyle=\small\ttfamily,breaklines=true,
    language=HTML},}}
{\endtcblisting}

这意味着在我的文档中:

\begin{shk}
Now is the winter of our discontent
Made glorious summer by this sun of York;
\end{shk}

看起来像这样:

在此处输入图片描述

这正是我想要的。

但是!假设我想在列表中框出一个单词,比如“winter”。我该怎么做?我不能只写,\fbox{winter}因为这样只会被列出,而不是转义到 LaTeX。mathescape列表包的选项似乎在 tcblisting 中不起作用。

我知道我可以使用tikzpicturewith[remember picture,overlay]在页面上定位一个框,但这似乎有点不雅...有没有办法在 tcblisting 本身内对文本进行装箱?

答案1

我不知道mathescape,但大概你不想/不需要进入数学模式,因为你只想制作一个盒子。

因此请使用escapechar=<char>。我已将您的代码片段转换为 MWE,以更清楚地显示解决方案,但相同escapechar=|(或列表中任何地方未使用的其他字符)在listing options您的环境定义中同样有效。

\documentclass{article}

\usepackage{tcolorbox}
\tcbuselibrary{listings}

\begin{document}
\begin{tcblisting}{listing only,listing options={basicstyle=\ttfamily,escapechar=|}}
Now is the |\fbox{winter}| of our discontent
Made glorious summer by this sun of York;
\end{tcblisting}
\end{document}

在此处输入图片描述

以下是可编译示例的完整代码:

\documentclass[11pt]{article}

\usepackage[pdftex]{xcolor}
\definecolor{vlgray}{gray}{0.9}
\definecolor{lgray}{gray}{0.7}

\usepackage{tcolorbox}
\tcbuselibrary{skins,breakable,listings}

\newenvironment{shk}{%
  \tcblisting{listing only,colback=vlgray,colframe=vlgray,enlarge
  top by=0mm,top=-2mm,bottom=2mm,enhanced,
  after={\par\vspace{0.5\baselineskip}\noindent},
  overlay={\node[draw,fill= black,yshift=4pt,xshift=-10pt,left,text=white,
         anchor=east,font=\footnotesize\bfseries] at (frame.south east)
         {Shakespeare};}, 
  listing options={basicstyle=\small\ttfamily,breaklines=true,
    language=HTML,escapechar=|},}}
{\endtcblisting}


\begin{document}
\begin{shk}
Now is the |\fbox{winter}| of our discontent
Made glorious summer by this sun of York;
\end{shk}
\end{document}

在此处输入图片描述

相关内容