我正在尝试为 C 代码制作动画。因此我使用颜色框来突出显示当前行(顺便问一下,我怎样才能突出显示整行?)。
我的问题是,我不太熟悉字体,所以我不知道如何在 lstlisting 环境中排列该代码,并且转义部分(突出显示的行)看起来相同。而且没有明显的不同。
\documentclass{standalone}
\usepackage{xcolor}
\usepackage{listings}
\usepackage[scaled, mono]{zi4}
\definecolor{bluekeywords}{rgb}{0,0,1}
\definecolor{types}{rgb}{0.17,0.57,0.68}
\lstset{%language=C,
captionpos=b,
breakatwhitespace=true,
escapeinside={(*@}{@*)},
keywordstyle=\color{bluekeywords},
}
\lstdefinestyle{c}{
morekeywords={bool,false,true},
}
\begin{document}
\begin{lstlisting}[language=C, style=c]
board[i][j] = path_len+1;
(*@\colorbox[RGB]{255,255,51}{\ttfamily{\color{blue}if} (board[i][j] == N * N) {\color{blue}return true};} @*)
\end{lstlisting}
\end{document}
这是编译后的文档的图片
并且另一行之后(之前)的一行被突出显示。
我认为,图像大小不同是由于人为的 \t 造成的,我已将其放入示例代码中以完全生成第二条突出显示的行。
是否有某种自动方法可以使用相同的字体?
答案1
解决方案是添加具有适当背景的第二个突出显示样式
\documentclass[a5paper]{article}
\usepackage{xcolor}
\usepackage{listings}
\usepackage[scaled, mono]{zi4}
\definecolor{bluekeywords}{rgb}{0,0,1}
\definecolor{types}{rgb}{0.17,0.57,0.68}
\definecolor{highlight}{RGB}{255,255,51}
\lstset{%language=C,
captionpos=b,
breakatwhitespace=true,
escapeinside={(*@}{@*)},
keywordstyle=\color{bluekeywords},
}
\lstdefinestyle{c}{
morekeywords={bool,false,true},
}
\lstdefinestyle{c-highlighted}{
morekeywords={bool,false,true},
backgroundcolor=\color{highlight},
}
\begin{document}
\begin{lstlisting}[language=C, style=c]
board[i][j] = path_len+1;
\end{lstlisting}
\begin{lstlisting}[language=C, style=c-highlighted]
if (board[i][j] == N * N) return true;
\end{lstlisting}
\end{document}
答案2
\ttfamily
是一个开关。它会更改字体系列,直到另行通知或当前组结束。它不带参数。
所以
\ttfamily{\color{blue}if} blah-blah-blah
if
将用蓝色打字机和blah-blah-blah
打字机排版。
使用
\texttt{color{blue}if} blah-blah-blah
限制打字机字体,if
或者,如果必须的话,
{\color{blue}\ttfamily if}} blah-blah-blah
或者
\textcolor{blue}{\ttfamily if} blah-blah-blah
\documentclass{standalone}
\usepackage{xcolor}
\usepackage{listings}
\usepackage[scaled, mono]{zi4}
\definecolor{bluekeywords}{rgb}{0,0,1}
\definecolor{types}{rgb}{0.17,0.57,0.68}
\lstset{%language=C,
captionpos=b,
breakatwhitespace=true,
escapeinside={(*@}{@*)},
keywordstyle=\color{bluekeywords},
}
\lstdefinestyle{c}{
morekeywords={bool,false,true},
}
\begin{document}
\begin{lstlisting}[language=C, style=c]
board[i][j] = path_len+1;
(*@\colorbox[RGB]{255,255,51}{\texttt{\textcolor{blue}{f}} (board[i][j] == N * N) \textcolor{blue}{return true};} @*)
\end{lstlisting}
\end{document}