比较推荐的方法是用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}
问题是:
- 将其中的
article
改成ctexbook
或者ctexart
之后,由\ccmd{\my code}
指令生成的效果中\my code
中的\
会消失掉,只显示my code
,而直接用\Colorbox{cmdbg}{\lstinline|\my code|}
生成的效果中\
不会消失,仍然正确显示为\my code
。这说明 ctex 与xparse
之间存在冲突。
也试过更新 ctex 包和 l3 相关的包后再试,但是更新总遇到问题,所以暂时放弃,不清楚是否有直接的方法可以 hack。
- 用
xpatch
方法在\lstinline
上挂一个\Colorbox
也可以,但是这种做法将导致\lstinline
内的内容无法断行,不清楚前面使用xparse
的方法是否也存在这一问题。