无法在 lstinputlisting 中显示 Δ:LaTeX 错误:无效的 UTF-8 字节序列 (�\lst@FillFixed@)

无法在 lstinputlisting 中显示 Δ:LaTeX 错误:无效的 UTF-8 字节序列 (�\lst@FillFixed@)

我有一个包含字符 的外部 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@). 这里(做同样的事情,只是也用 替换portuguesegreek稍微修改了字体,但仍然无法显示字符。

我设法使用(非数学模式)在常规文本中显示 Δ:

\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":"Δ"
}

点击此处查看:https://www.overleaf.com/read/fkkcsyfppppj

答案1

你需要

literate={Δ}{{\ensuremath{\Delta}}}{1},

需要literate,因为listings无法本机处理非 ASCII 字符并需要帮助(列表采用 UTF8)。

第二个参数的形式解释如下

  • \Delta还不够,因为它需要处于数学模式
  • \ensuremath{\Delta}不起作用,因为根据文档listings(第 52 页)

    每个“打印单元”都<replacement text>必须放在括号中,除非它是一个单个字符。

  • 确实如此{\ensuremath{\Delta}}

相关内容