我正在编写一个包含大量编程片段的文本,我已将其放入使用 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 中不起作用。
我知道我可以使用tikzpicture
with[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}