我正在使用带有 texlive 2021 的 Texstudio。为了突出显示以下代码片段中的某些行lstlisting
,我使用colorbox
\begin{lstlisting}[style=listing1]
|\colorbox{yellow}{if(a >= b)}|
return 2*a;
return 2*b;
\end{lstlisting}
完整代码如下:
\documentclass[11pt]{article}
\usepackage{listings}
\usepackage{graphicx}
\usepackage{xcolor}
\lstdefinestyle{listing1}{
tabsize=1,
frame=single,
framerule=2pt,
frameround=tttt,
breakatwhitespace=false,
breaklines=true,
deletekeywords={...},
escapeinside={\%*}{*)},
keepspaces=true,
morekeywords={*,...},
numbers=left,
numberstyle=\tiny\color{gray},
rulecolor=\color{black},
showspaces=false,
showstringspaces=false,
showtabs=false,
stepnumber=1,
title=\lstname,
linewidth=3.8cm,
xleftmargin=0.2cm,
escapechar=|,
}
\begin{document}
\begin{lstlisting}[style=listing1]
|\colorbox{yellow}{if(a >= b)}|
return 2*a;
return 2*b;
\end{lstlisting}
\end{document}
有两个问题:边框损坏,字符>
变为?
。有什么想法吗?
请不要建议使用lstlinebgrd
因为它会引发错误这里在 TexLive 2021 中,尚未修复。解决方案这里对我没用。
答案1
您可以使用 T1 编码摆脱错误的符号。
您可以通过缩小颜色框(通过更改 \fboxsep)或扩大线条距离来避免边框间隙。更好的解决方案是使用 tcolorbox 作为框架。
\documentclass[11pt]{article}
\usepackage[T1]{fontenc}
\usepackage{listings}
\usepackage{graphicx}
\usepackage{xcolor}
\lstdefinestyle{listing1}{
tabsize=1,
frame=single,
framerule=2pt,
frameround=tttt,
breakatwhitespace=false,
breaklines=true,
deletekeywords={...},
escapeinside={\%*}{*)},
keepspaces=true,
morekeywords={*,...},
numbers=left,
numberstyle=\tiny\color{gray},
rulecolor=\color{black},
showspaces=false,
showstringspaces=false,
showtabs=false,
stepnumber=1,
title=\lstname,
linewidth=3.8cm,
xleftmargin=0.2cm,
escapechar=|,
}
%\AddToHook{env/lstlisting/begin}{\fboxsep=0pt} %smaller colorbox
\AddToHook{env/lstlisting/begin}{\fontsize{11pt}{19pt}\selectfont} %larger line distance
\begin{document}
\begin{lstlisting}[style=listing1]
|\colorbox{yellow}{if(a >= b)}|
return 2*a;
return 2*b;
\end{lstlisting}
\end{document}
答案2
我知道这不是您想要看到的,但是我不太擅长列出,希望 MWE 能够帮助您获得您需要的结果。
\documentclass[a4paper]{article}
\usepackage{scrextend}
\usepackage[T1,T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[russian,english]{babel}
\usepackage{tabularx}
\usepackage{amssymb}
\usepackage{xcolor}
\usepackage[framemethod=TikZ]{mdframed}
\usepackage{moreverb}
\usepackage{enumitem}
\usepackage{listings}
\lstset{
language=C,
morekeywords={*,...},
numbers=left,
numbersep=10pt,
numberstyle=\tiny\color{gray},
rulecolor=\color{black},
showspaces=false,
showstringspaces=false,
showtabs=false,
stepnumber=1,
stringstyle=\color{mymauve},
title=\lstname,
basicstyle=\ttfamily,
showstringspaces=false,
breaklines=true,
keywordstyle={},
frame=none,% changed to "none"
rulecolor=\color{gray},
escapechar=|
}
\begin{document}
\begin{mdframed}[roundcorner=10pt,leftmargin=1cm,rightmargin=5cm,%
innerleftmargin=1cm,innerrightmargin=1cm]
\begin{lstlisting}
|\colorbox{green}{if(a >= b)}|
return 2*a;
return 2*b;
\end{lstlisting}
\end{mdframed}
\end{document}