不使用 \Colorbox 为 \verb 或 \lstinline 命令添加背景颜色

不使用 \Colorbox 为 \verb 或 \lstinline 命令添加背景颜色

更新:

除了我之前的帖子外,这里还有一张截图,可以为您提供更好的视觉示例。此截图仅HTML用于CSS演示。

在 中CSS,该code部件是使用font-family: monospace, sans-serif;background: #EFF0F1;display: inline-block;和制成的padding: 2px 5px;

我想知道是否有简单的模仿这种风格的方式LaTeX\lstinline或更好的选择)没有 \Colorbox(如果可能的话)。 的所有实例\lstinline都将具有相同的样式。

我的意思是简单的我觉得我可以在\lstset{}序言中只写一次——这很简单——而不是输入\Colorbox每个实例\lstinline——这对我这样的新手来说又长又麻烦。否则,使用\Colorbox就好了。

示例图片

原始问题:

我需要使用或创建inline codes灰色背景。我读过\verb\lstinline这里哪个使用\Colorbox哪个效果都很好!

我的问题:我们是否可以仅使用 来实现相同的效果\lstinline,而不使用 ,\Colorbox这样会更简单吗?

\documentclass{article}
\usepackage{xcolor}
\usepackage{listings}
\definecolor{mygray}{rgb}{0.8,0.8,0.8}
\lstset{%
basicstyle=\ttfamily,
breaklines = true,
backgroundcolor=\color{mygray},
}
\usepackage{realboxes}
\begin{document}

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

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

\end{document}

在此处输入图片描述

答案1

您可以修补\lstinline使用\Colorbox;当然,您失去了断线的可能性\lstinline

\documentclass{article}
\usepackage{xpatch}
\usepackage{xcolor}
\usepackage{listings}
\usepackage{realboxes}

\definecolor{mygray}{rgb}{0.8,0.8,0.8}

\lstset{
  basicstyle=\ttfamily,
  backgroundcolor=\color{mygray},
}

\makeatletter
\xpretocmd\lstinline{\Colorbox{mygray}\bgroup\appto\lst@DeInit{\egroup}}{}{}
\makeatother

\begin{document}

\lstinline[language=TeX]|\my code|

\begin{lstlisting}[language=TeX]
\my code
\end{lstlisting}

\end{document}

在此处输入图片描述

答案2

(我在原帖表示他/她主要感兴趣的是让所有\lstinline有色人种的情况自动地,即无需将实例装入显式的\Colorbox{<color-of-choice>}{\lstinline...}“包装器”中。)

据我所知,该listings软件包目前不提供\lstinline...在彩色背景下渲染所有实例的选项或设置。如果您愿意并且能够使用 LuaLaTeX(谁知道呢,也许您已经在这样做了),那么设置一个充当预处理器的 Lua 函数很简单,即在处理的早期阶段扫描所有输入行并自动将 、 和 的所有实例封装\lstinline|...|\verb|...|包装\Verb|...|器中\Colorbox{mygray}{...}

在下面的示例代码中,假设\lstinline\verb和的“参数”\Verb总是用 (“管道”) 符号分隔|。要暂停 Lua 函数的操作,请使用不同的分隔符或执行宏\ColorLstinlineOff

在此处输入图片描述

% !TeX program = lualatex
\documentclass{article}
\usepackage{xcolor,listings,realboxes,fancyvrb} % fancyvrb for '\Verb' macro
\definecolor{mygray}{rgb}{0.8,0.8,0.8}
\lstset{basicstyle=\ttfamily, breaklines = true, backgroundcolor=\color{mygray}}
\usepackage[doublespacing]{setspace} % just for this example

\usepackage{luacode} % for 'luacode' environment
\begin{luacode}
-- the following code employs Lua's powerful "string.gsub" function
function color_lstinline ( s )
   s = string.gsub ( s , "\\lstinline%b||", "\\Colorbox{mygray}{%0}" ) 
   s = string.gsub ( s , "\\[vV]erb%b||", "\\Colorbox{mygray}{%0}" ) 
   return s
end
\end{luacode}
%% Define 2 LaTeX macros to switch operation of Lua function on and off
\newcommand{\ColorLstinlineOn}{\directlua{
   luatexbase.add_to_callback ( "process_input_buffer" , 
   color_lstinline, "color_lstinline" )}}
\newcommand{\ColorLstinlineOff}{\directlua{
   luatexbase.remove_from_callback ( "process_input_buffer" , 
   "color_lstinline" )}}
\AtBeginDocument{\ColorLstinlineOn} % Default: activate the Lua function 

\begin{document}
\obeylines % just for this example
This is my \lstinline|amazing| code.
This is my \verb|@#$%^&*()\%| code.
This is my \Verb!amazing! code. 
This is my \Colorbox{mygray}{\lstinline!amazing!} code.

\end{document}

答案3

下面定义了一个新的宏\clist(需要包xparse),它可以自动接近颜色盒。

\documentclass{article}
\usepackage{xcolor,xparse}
\usepackage{listings}
\definecolor{mygray}{rgb}{0.8,0.8,0.8}
\lstset{%
basicstyle=\ttfamily,
breaklines = true,
backgroundcolor=\color{mygray},
}
\usepackage{realboxes}

\DeclareDocumentCommand{\clist}{v}{%
    \Colorbox{mygray}{\csname lstinline\endcsname!#1!}%
}

\begin{document}

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

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

\end{document}

在此处输入图片描述

答案4

一个简单的解决方案就是在需要时为灰色背景创建一个别名

\newcommand{\code}[1]{\colorbox{mygray}{\lstinline|#1|}}

相关内容