列表 - ! 程序包 inputenc 错误:无效的 UTF-8 字节

列表 - ! 程序包 inputenc 错误:无效的 UTF-8 字节

我必须在 listing 包中使用 unicode char,但是以下示例中报告了错误:

! Package inputenc Error: Invalid UTF-8 byte "94.

如何解决此错误:

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning}
\usepackage{listings}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usetikzlibrary{fit,calc}
\newcounter{T}
\newcommand\makenode[2]{%
    \tikz[baseline=0pt, remember picture] { 
        \node[anchor=base,#1/.try] (m-\the\value{T}) {#2};}%
    %\node[fill=red!10,label=\the\value{T},anchor=base,#1/.try] (m-\the\value{T}) {#2}; }%
    \stepcounter{T}%
}
\lstdefinelanguage{myLang}{
    alsoletter=0123456789\+\=\*\/<(){};\,
}
\lstset{
    identifierstyle=\makenode{identifier},
    inputencoding = utf8,  % Input encoding
    extendedchars = true,  % Extended ASCII
}
\lstset{label= ,caption= ,captionpos=b,numbers=left}
\begin{document}
    \begin{lstlisting}[language=myLang, numbers=none, escapechar=!,
    basicstyle=\ttfamily\bfseries, linewidth=0.82\linewidth] 
    
    └── rootdir
    ├── product
    │   ├── app
    │   ├── etc
    │   └── priv-app
    ├── system
    │   ├── app
    │   ├── etc
    │   └── priv-app
    └── vendor
    ├── app
    ├── etc
    └── priv-app
    
\end{lstlisting}
\begin{tikzpicture}[remember picture, overlay,
    every edge/.append style = {->, thick, >=latex,
        line width = 1pt },
    box/.style = {align=center, minimum height = 0pt,inner sep=0,
        font = \bfseries},
    text width = 2.5cm ]
    \node[box,fit=(m-4)(m-6), draw] {};
    \foreach \x/\y in {18/6,21/9,25/13,18/29,21/31,25/34} {
        \draw[-latex] (m-\x) ..controls ([xshift=2cm]m-\x) (m-\y);
    }
\end{tikzpicture} 
\end{document}

答案1

据我所知,该包listings不支持 8 位 TeX 引擎的多字节编码。解决方法:

  • listingsutf8如果 UTF-8 字符可以转换为 LaTeX 支持的 8 位编码,则可以使用包作为解决方法。如果环境lstlistings不受支持,则内容将进入单独的文件,该文件由\lstinputlisting正确的编码选项读取。然后包会listingsutf8自动将文件转换为包listings

    方框绘图字符使问题变得复杂,因为代码页 437 中有这些字符,但是却cp437.def遗漏了它们。

  • 但也许还有更简单的方法。pmboxdraw如果您没有字体.dfu为 LaTeX 的 UTF-8 支持提供文件,则包会提供这些字符。如果您不需要listings此“ASCII 艺术”的包功能,那么一些逐字环境将起作用(普通verbatim、包verbatimalltt具有更好的转义支持的包,...)。

例子:

\documentclass{article}% standalone does not work in this case
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[variablett]{lmodern}% with proportional type writer font
\usepackage{pmboxdraw}
\usepackage{alltt}
\begin{document}
\begin{alltt}
└── rootdir
├── product
│   ├── app
│   ├── etc
│   └── priv-app
├── system
│   ├── app
│   ├── etc
│   └── priv-app
└── vendor
├── app
├── etc
└── priv-app
\end{alltt}
\end{document}

在此处输入图片描述

答案2

所以,我遇到了同样的问题。一个选项是使用\begin{verbatim},但我真的很想自定义我的列表,例如使用标题。所以我所做的是\usepackage{pmboxdraw}在列表中添加和literate= ...。示例:

\documentclass{article}% standalone does not work in this case
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{caption}
\usepackage{xcolor}
\usepackage{listings}
\usepackage{pmboxdraw}
\begin{document}
\begin{lstlisting}[language=myLang, caption=myCaption, label=lst:myLabel, numbers=none, escapechar=!, basicstyle=\ttfamily\bfseries, linewidth=0.82\linewidth,literate = {├}{{\textSFviii}}1 {─}{{\textSFx}}1 {└}{{\textSFii}}1 {│}{{\textSFxi}}1] 
        └── rootdir
        ├── product
        │   ├── app
        │   ├── etc
        │   └── priv-app
        ├── system
        │   ├── app
        │   ├── etc
        │   └── priv-app
        └── vendor
        ├── app
        ├── etc
        └── priv-app
\end{lstlisting}

在此处输入图片描述

所有符号均可在此处找到:https://ctan.mirror.norbert-ruehl.de/macros/latex/contrib/pmboxdraw/pmboxdraw.pdf

相关内容