440 字

语法高亮:在 lstinline 中给行内代码添加背景颜色 z

LaTeX; LaTeX; lstlistings; 语法高亮; highlight;

原文地址https://tex.stackexchange.com/questions/357227/adding-background-color-to-verb-or-lstinline-command-without-colorbox

比较推荐的方法是用xparse宏包提供的DeclareDocumentCommand,使用这种方法的好处是用这种方法定义的命令\ccmd在使用方式上与\verb命令非常相似,可以用{...}来包含参数,也可以用|...|或者!...!等来包含参数。

\documentclass{article}

\usepackage{xcolor,xparse}
\usepackage{listings}

\definecolor{cmdbg}{rgb}{0.8,0.8,0.8}
\lstset{%
    basicstyle=\ttfamily,
    breaklines = true,
    backgroundcolor=\color{cmdbg},
}

\usepackage{realboxes}  % 提供 \Colorbox

\DeclareDocumentCommand{\ccmd}{v}{% 参数 v 表示工作方法类似于 \verb
    \Colorbox{cmdbg}{\csname lstinline\endcsname!#1!}%
}

\begin{document}

% demo using \lstinline only
This is \lstinline|my code|

% demo using \lstinline and \Colorbox
This is \Colorbox{cmdbg}{\lstinline|my code|}
\clist{my code}

\end{document}

问题是:

  1. 将其中的article改成ctexbook或者ctexart之后,由\ccmd{\my code}指令生成的效果中\my code中的\会消失掉,只显示my code,而直接用\Colorbox{cmdbg}{\lstinline|\my code|}生成的效果中\不会消失,仍然正确显示为\my code。这说明 ctex 与xparse之间存在冲突。

也试过更新 ctex 包和 l3 相关的包后再试,但是更新总遇到问题,所以暂时放弃,不清楚是否有直接的方法可以 hack。

  1. xpatch方法在\lstinline上挂一个\Colorbox也可以,但是这种做法将导致\lstinline内的内容无法断行,不清楚前面使用xparse的方法是否也存在这一问题。