并非所有 UTF8 符号都适用于列表

并非所有 UTF8 符号都适用于列表

我在 Linux 上,我有一份使用其进行编译的文档xelatex main.tex

\documentclass[12pt]{article}

\usepackage{color}
\usepackage{xcolor}
    \definecolor{code_linenumbers_b}{RGB}{215,215,215}
    \definecolor{code_linenumbers}{RGB}{255,255,255}
    \definecolor{code_background}{RGB}{250,250,250}
    \definecolor{code_comments}{RGB}{185,185,185}
    \definecolor{code_borders}{RGB}{86,211,239}

\usepackage{mathspec}
    \setallmonofonts[
        %Path=.,
        Extension=.ttf,
        Scale=0.8,
        UprightFont=*--regular,
        BoldFont=*--bold,
        ItalicFont=*--italic
    ]{liberation-mono}

\usepackage{listings}
    %Global
    \lstset{
        %frame
        frame=l,
        captionpos=b,
        numbersep=3.5mm,
        xleftmargin=0.35cm,
        xrightmargin=0cm,
        framesep=0mm,
        framexleftmargin=2.5mm,
        framerule=0.5mm,
        %colors
        backgroundcolor=\color{code_background},
        basicstyle=\ttfamily\color{black},
        numberstyle=\ttfamily\bfseries\color{code_linenumbers},
        fillcolor=\color{code_linenumbers_b},
        commentstyle=\color{code_comments},
        keywordstyle=\color{black}\bfseries,
        rulecolor=\color{code_borders},
        %code format
        showspaces=false,
        breaklines=true,
        breakatwhitespace=true,
        tabsize=3,
        columns=flexible
    }

\begin{document}
    \lstinputlisting[
        language=C,
        caption=\lstinline{main.c},
        label=r001,
        numbers=left,
        xleftmargin=1.15cm,
        framesep=8mm
    ]{main.c}

\end{document}

我的main.c文件如下所示:

#include <stdio.h>

int main(){

    //            ir
    //            ↓
    //        012345678
    //      0     *
    //      1    ***
    //      2   *****
    //      3  *******
    // ir → 4 *********

    return 0;
}

但编译后(没有错误或警告)我得到的结果main.pdf中箭头( U+2193) 和( U+2192) 的位置不正确:

在此处输入图片描述

所有字体均位于和*.ttf的同一文件夹中。main.texmain.c

ziga@ziga-laptop:mwe$ ls -l
total 468
-rw-r--r-- 1 ziga ziga 120308 May 21 17:30 liberation-mono--bold-italic.ttf
-rw-r--r-- 1 ziga ziga 107620 May 21 17:30 liberation-mono--bold.ttf
-rw-r--r-- 1 ziga ziga 126308 May 21 17:30 liberation-mono--italic.ttf
-rw-r--r-- 1 ziga ziga 110204 May 21 17:29 liberation-mono--regular.ttf
-rw-r--r-- 1 ziga ziga    229 May 21 18:45 main.c
-rw-r--r-- 1 ziga ziga   1479 May 21 18:50 main.tex

他们确实有一个字形箭头U+2193)和U+2192)我通过打开所有*.ttf文件进行仔细检查字体

在此处输入图片描述

在此处输入图片描述

xelatex是一个 UTF-8 引擎,应该支持 UTF-8 编码的多字节字符...那么为什么它们不能正确呈现呢?

答案1

我用这个方法:'listings' 包和 UTF-8

MWE:

\documentclass{article}
\usepackage{fontspec}
\usepackage{xcolor}
\usepackage{listings}
\makeatletter
\lst@InputCatcodes
\def\lst@DefEC{%
 \lst@CCECUse 
 \lst@ProcessLetter
  ^^^^2192^^^^2193^^00}
\lst@RestoreCatcodes
\makeatother
\lstset{
   basicstyle=\ttfamily,
   keepspaces,
   commentstyle=\color{gray},
   extendedchars
}
\begin{document}
    \lstinputlisting[language=C]{main.c}
\end{document}

相关内容