![无法在 tcolorbox 列表中使用 unicode 框绘图字符](https://linux22.com/image/416991/%E6%97%A0%E6%B3%95%E5%9C%A8%20tcolorbox%20%E5%88%97%E8%A1%A8%E4%B8%AD%E4%BD%BF%E7%94%A8%20unicode%20%E6%A1%86%E7%BB%98%E5%9B%BE%E5%AD%97%E7%AC%A6.png)
我正在尝试使用 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}