You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

lstlisting代码整体变蓝异常及关键字加粗、字体修改求助

解决lstlisting C#代码染色异常与字体加粗问题

针对你遇到的两个问题(代码过度染色、关键字加粗字体限制),我整理了具体的解决方案:

一、修复代码过度变蓝的问题

你当前的配置中,虽然指定了basicstyle=\color{black},但因为缺少对字符串、标点、预处理指令等元素的显式样式设置,再加上identifierstyle的范围覆盖了大量代码元素,导致大部分内容变成蓝色。可以通过以下调整解决:

  1. 补充非关键字/标识符的样式设置
    在\lstset中添加以下配置,确保这些元素保持黑色:

    stringstyle=\color{black},    % 字符串内容设为黑色
    directivestyle=\color{black}, % using等预处理指令设为黑色
    literate=*{\#}{{\color{black}\#}}1,  % 井号(#)单独设为黑色
    
  2. 调整标识符样式(可选)
    如果你只希望关键字加粗,而标识符(类名、变量名等)仅蓝色不加粗,可以修改identifierstyle:

    identifierstyle=\color{blue}, % 去掉\bfseries,仅保留蓝色
    

二、解决关键字加粗的字体问题

默认的等宽字体(比如Computer Modern Typewriter)通常没有粗体版本,所以\bfseries不会生效。你可以在不修改整个文档字体的前提下,单独为lstlisting配置支持粗体的等宽字体:

方案1:PDFLaTeX用户

加载支持粗体的等宽字体包,比如lmodern或courier,然后保持\ttfamily即可:

\usepackage{lmodern} % 引入Latin Modern字体,等宽字体重粗体支持
% 或者用 courier:\usepackage{courier}

\lstset{
    basicstyle=\color{black}\ttfamily\scriptsize, % ttfamily会自动使用lmodern的等宽字体
    keywordstyle=\color{blue}\bfseries, % 现在\bfseries能生效了
}

方案2:XeLaTeX/LuaLaTeX用户

用fontspec包单独指定lstlisting的等宽字体(比如Consolas、Fira Code),完全不影响文档其他字体:

\usepackage{fontspec}
\setmonofont{Consolas}[BoldFont=Consolas Bold] % 指定支持粗体的等宽字体

\lstset{
    basicstyle=\color{black}\ttfamily\scriptsize,
    keywordstyle=\color{blue}\bfseries,
}

调整后的完整配置示例

\usepackage{listings}
\usepackage{xcolor}
\usepackage{lmodern} % PDFLaTeX用户可选,XeLaTeX/LuaLaTeX用户替换为fontspec配置

\definecolor{almostwhite}{rgb}{0.98,0.98,0.98}

\lstset{
    language={[Sharp]C},
    basicstyle=\color{black}\ttfamily\scriptsize,
    numbers=left,
    numberstyle=\tiny\color{black},
    numbersep=3pt,
    tabsize=1,
    extendedchars=true,
    breaklines=true,
    keepspaces=true,
    showspaces=false,
    showtabs=false,
    xleftmargin=5pt,
    framexleftmargin=5pt,
    framexrightmargin=5pt,
    framexbottommargin=4pt,
    morecomment=[l]{//},
    morecomment=[s]{/*}{*/},
    showstringspaces=false,
    commentstyle=\color{black},
    keywordstyle=\color{blue}\bfseries,
    identifierstyle=\color{blue},
    stringstyle=\color{black},
    directivestyle=\color{black},
    literate=*{\#}{{\color{black}\#}}1,
    backgroundcolor=\color{almostwhite},
}

内容的提问来源于stack exchange,提问作者emboel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:45:16