无法在 tcolorbox 列表中使用 unicode 框绘图字符

无法在 tcolorbox 列表中使用 unicode 框绘图字符

我正在尝试使用 Unicode 框绘制字符tcblisting。首先,我使用pmboxdraw库来定义这些字符应该映射到什么,以便可以绘制它们。我能够在列表环境之外使用这些字符,但不能在列表环境内部使用这些字符。出现的错误是无效的 UTF-8 字节序列

下面是一个最简单的例子来说明我的意思:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{pmboxdraw}
\usepackage{newunicodechar}
\newunicodechar{└}{\textSFii}
\newunicodechar{├}{\textSFviii}
\newunicodechar{─}{\textSFx}
\usepackage{tcolorbox}
%\tcbuselibrary{listingsutf8,breakable,skins}
\tcbuselibrary{listings,breakable,skins}
\definecolor{codebgcolor}{cmyk}{0,0.05,0.05,0}
\makeatletter
\newtcblisting{coloredlisting}{
    breakable,enhanced,
    listing inputencoding=utf8,
    listing only,
    frame hidden,
    colback=codebgcolor,
    % == indented nested Verbatim ==
    grow to left by=0pt,
    left=0pt,
    grow to right by=0pt,
    right=0pt,
    arc=0pt
}
\makeatother
\begin{document}
    \begin{verbatim}
    ├── a
    └── b
    \end{verbatim}
    
    \begin{coloredlisting}
    ├── a
    └── b
    \end{coloredlisting}
    
\end{document}

以下是我得到的结果:

最终渲染结果

我尝试过的:

我查看了 tcolorbox 的手册https://osl.ugr.es/CTAN/macros/latex/contrib/tcolorbox/tcolorbox.pdf然后发现了一些东西。首先我尝试使用listingsutf8如下方法:

\tcbuselibrary{listingsutf8,breakable,skins}

这使得错误消失,但字符没有被绘制出来。

然后我在手册中查找字符串“utf”的实例,并发现了这个(在第319页,第16.4节库的选项键 listingsutf8):

如果您想使用列表包和“真正的”UTF-8 源代码,那么请不要使用,listingsutf8而是 listings使用/tcb/listing inputencoding=utf8针对特定 UTF-8 编码字符的特定手动黑客。

我尝试了一下,但错误无效的 UTF-8 字节序列回来了。现在,手册里有关于针对特定 UTF-8 编码字符的特定手动破解... 他们那是什么意思。我认为这些手动破解正是我所需要的,但不知道如何继续。

答案1

您可以使用列表的文字键来设置字符:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{pmboxdraw}
\usepackage{newunicodechar}
\newunicodechar{└}{\textSFii}
\newunicodechar{├}{\textSFviii}
\newunicodechar{─}{\textSFx}
\usepackage{tcolorbox}
%\tcbuselibrary{listingsutf8,breakable,skins}
\tcbuselibrary{listings,breakable,skins}
\lstset{%
  literate={└}{\textSFii}1
           {├}{\textSFviii}1
           {─}{\textSFx}2
       }           
\definecolor{codebgcolor}{cmyk}{0,0.05,0.05,0}
\makeatletter
\newtcblisting{coloredlisting}{
    breakable,enhanced,
    listing inputencoding=utf8,
    listing only,
    frame hidden,
    colback=codebgcolor,
    % == indented nested Verbatim ==
    grow to left by=0pt,
    left=0pt,
    grow to right by=0pt,
    right=0pt,
    arc=0pt
}
\makeatother
\begin{document}
    \begin{verbatim}
    ├── a
    └── b
    \end{verbatim}

    \begin{coloredlisting}
    ├── a
    └── b
    \end{coloredlisting}

\end{document}

在此处输入图片描述

相关内容