LaTeX lstlisting展示含中文字符的JSON代码报错求助
问题解决:LaTeX listings展示含中文字符的JSON时出错
错误原因
你遇到的三类重复错误,核心是**listings包的literate规则配置错误**:
- 开头的
*通配符会让数字着色规则强制应用到所有字符,包括中文字符,而LaTeX无法将中文解析为数字,触发数值相关错误; - 错误定义的
comment规则会把JSON字符串里的:"误判为注释,干扰中文内容的解析逻辑; - 另外
eclipseStrings颜色定义里的0.0是非法值,RGB参数必须是0-255的整数。
修复方案
1. 调整literate规则
移除规则开头的*,让数字着色仅对0-9单独生效,不影响中文字符:
literate= {0}{{{\color{numb}0}}}{1} {1}{{{\color{numb}1}}}{1} {2}{{{\color{numb}2}}}{1} {3}{{{\color{numb}3}}}{1} {4}{{{\color{numb}4}}}{1} {5}{{{\color{numb}5}}}{1} {6}{{{\color{numb}6}}}{1} {7}{{{\color{numb}7}}}{1} {8}{{{\color{numb}8}}}{1} {9}{{{\color{numb}9}}}{1}
2. 删除错误的comment定义
JSON语法里没有这种格式的注释,直接删掉以下两行:
comment=[l]{:\ "}, morecomment=[l]{:"},
3. 修正颜色定义&替换兼容字体
- 将
eclipseStrings里的0.0改为整数0; - Overleaf环境下
bsmi字体支持不佳,换成gbsn(宋体)确保中文正常渲染:
\definecolor{eclipseStrings}{RGB}{42,0,255} ... \begin{CJK*}{UTF8}{gbsn}
完整修复代码
\documentclass{sigchi} \usepackage{balance} % 平衡最后一页内容 \usepackage{graphics} % 若用EPS,建议替换为graphicx \usepackage[T1]{fontenc} % 支持变音符号 \usepackage{txfonts} \usepackage{mathptmx} \usepackage[pdflang={en-US},pdftex]{hyperref} \usepackage{color} \usepackage{booktabs} \usepackage{textcomp} \usepackage{CJKutf8} \usepackage{microtype} \usepackage{ccicons} \usepackage{todonotes} \usepackage{bera} \usepackage{listings} \usepackage{xcolor} \definecolor{eclipseStrings}{RGB}{42,0,255} \definecolor{eclipseKeywords}{RGB}{127,0,85} \colorlet{numb}{magenta!60!black} \lstdefinelanguage{json}{ basicstyle=\normalfont\ttfamily, stringstyle=\color{eclipseKeywords}, % 字符串样式 numbers=left, numberstyle=\scriptsize, stepnumber=1, numbersep=8pt, showstringspaces=false, breaklines=true, frame=lines, backgroundcolor=\color{white}, string=[s]{"}{"}, literate= {0}{{{\color{numb}0}}}{1} {1}{{{\color{numb}1}}}{1} {2}{{{\color{numb}2}}}{1} {3}{{{\color{numb}3}}}{1} {4}{{{\color{numb}4}}}{1} {5}{{{\color{numb}5}}}{1} {6}{{{\color{numb}6}}}{1} {7}{{{\color{numb}7}}}{1} {8}{{{\color{numb}8}}}{1} {9}{{{\color{numb}9}}}{1} } \begin{document} \begin{CJK*}{UTF8}{gbsn} \begin{lstlisting}[language=json,firstnumber=1] {"src": "中文字", "dst": "中文字"} \end{lstlisting} \underline{Example 1} English: 中文字 \balance{} \end{CJK*} \end{document}
内容的提问来源于stack exchange,提问作者Raptor
相关产品推荐
相关产品推荐

