列表和转义乳胶的字体相同

列表和转义乳胶的字体相同

我正在尝试为 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}

相关内容