我有一个包含字符 的外部 JSON 文件Δ
。可以构建文档,但出现错误:LaTeX Error: Invalid UTF-8 byte sequence (�\lst@FillFixed@).
由于它是外部的,因此我正在使用:
\lstinputlisting[language=json,firstnumber=1]{content/future/json/Vertices.json}
它已显示并格式化。但是 Delta 不存在。仅显示为空括号。
根据建议这里我尝试添加\UseRawInputEncoding
- 括号不再是空的,现在填充了:“ ΡT
”
这里建议添加 \usepackage[utf8]{inputenc} \usepackage{listingsutf8} 括号又为空。使用\usepackage[greek]{babel}
也没有任何作用。
有些帖子专门针对列表,例如这。当然,我将整行 Umlaute 替换为:literate={Δ}{{\"Delta}}
。然而,这只会导致无法构建文档,并且出现错误:LaTeX Error: Invalid UTF-8 byte sequence (�\lst@FillFixed@).
这这里(做同样的事情,只是也用 替换portuguese
)greek
稍微修改了字体,但仍然无法显示字符。
我设法使用(非数学模式)在常规文本中显示 Δ:
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\DeclareUnicodeCharacter{0394}{\ensuremath{\Delta}}
但是这并不影响代码框。
完整代码:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{bera}% optional: just to have a nice mono-spaced font
\usepackage{listings}
\usepackage{xcolor}
\colorlet{punct}{red!60!black}
\definecolor{background}{HTML}{EEEEEE}
\definecolor{delim}{RGB}{20,105,176}
\colorlet{numb}{magenta!60!black}
\lstdefinelanguage{json}{
basicstyle=\normalfont\ttfamily,
numbers=left,
numberstyle=\scriptsize,
stepnumber=1,
numbersep=8pt,
showstringspaces=false,
breaklines=true,
frame=lines,
backgroundcolor=\color{background},
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}
{:}{{{\color{punct}{:}}}}{1}
{,}{{{\color{punct}{,}}}}{1}
{\{}{{{\color{delim}{\{}}}}{1}
{\}}{{{\color{delim}{\}}}}}{1}
{[}{{{\color{delim}{[}}}}{1}
{]}{{{\color{delim}{]}}}}{1},
}
\begin{document}
\lstinputlisting[language=json,firstnumber=1]{Vertices.json}
\end{document}
中的 JSON Vertices.json
(外部文件):
{
"_key":"9374773",
"_id":"V1/9374773",
"_rev":"_fEczBK----",
"Description":"2018 maximum braking distance",
"xpl_isGroupNode":"Δ",
"xpl_isGeneric":"Δ"
}
答案1
你需要
literate={Δ}{{\ensuremath{\Delta}}}{1},
需要literate
,因为listings
无法本机处理非 ASCII 字符并需要帮助(列表采用 UTF8)。
第二个参数的形式解释如下
\Delta
还不够,因为它需要处于数学模式\ensuremath{\Delta}
不起作用,因为根据文档listings
(第 52 页)每个“打印单元”都
<replacement text>
必须放在括号中,除非它是一个单个字符。- 确实如此
{\ensuremath{\Delta}}
。