# Boxed text inside tcolorbox tcblisting?

I am writing a text which includes lots of programming snippets which I've put into environments which use 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}


This means that in my document:

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


looks like this:

which is exactly what I want.

However! Suppose I want to box one word, say "winter", in my listing. How do I do that? I can't merely write \fbox{winter} as that will simply be listed, rather than escaped to LaTeX. The mathescape option of the listings package doesn't seem to work in tcblisting.

I know I could use tikzpicture with [remember picture,overlay] to position a box on the page, but that seems a little inelegant... is there a way of boxing text within tcblisting itself?

I don't know about mathescape, but presumably you don't want/need to enter math mode anyway, since you just want to make a box.

So use escapechar=<char> instead. I've turned your code snippets into an MWE to more clearly show the solution, but the same escapechar=| (or some other character not used anywhere in the listing) is equally valid inside listing options in your environment's definition.

\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}


Here's the full code made into a compilable example:

\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}


• Many thanks indeed! That's exactly what I was looking for. I was hunting through the tcolorbox manual for information on escaping, and couldn't find anything - it must be in the documentation of the listings package instead. – Alasdair Mar 21 '15 at 10:39
• Glad it helped you out, @Alasdair. You're right about needing to track down the listings documentation for all the available listing options settings. If I can answer anything else here, please let me know. Otherwise, please consider accepting my answer if you're happy with it. Cheers! :-) – Paul Gessler Mar 21 '15 at 13:22
• Thanks again Paul, yes I've accepted your answer, and indeed implemented it in my LaTeX file. And it works a treat! – Alasdair Mar 23 '15 at 0:00