XeLaTeX:PDF 中没有 Unicode 字符

XeLaTeX:PDF 中没有 Unicode 字符

这个问题与这个问题相关:XeLaTeX-特殊的 Unicode 字符

当我使用 XeLaTeX 生成 PDF 时,我也遇到了同样的问题,即其中缺少 unicode 字符。

我使用了以下示例代码:

\documentclass[varwidth]{standalone}

\usepackage{fontspec}
\setmainfont{Linux Libertine}
\usepackage{listings}

\begin{document}
    These characters are working - +ľščťžýáí˝¨˘˛˙´°'

    These aren't - ├ └

    \begin{lstlisting}
        Listing: ├ └
    \end{lstlisting}
\end{document}

我尝试了不同的字体,结果相同。我在 LibreOffice Writer 中检查发现缺失的字符包含在给定的字体中。

输出文件: 在此处输入图片描述

我的操作系统是 Linux(Manjaro),我通过终端运行 XeLaTeX。

有人知道潜在的问题是什么吗?

解决方案:

问题确实是该字体不适合我想要的字符。

下面展示了 Marijn 提出的一种解决方案,利用了一个针对此类缺失字符的包。

这篇博客文章中描述了另一种实现后备字体的方法: https://blog.michael.franzl.name/2014/12/10/xelatex-unicode-font-fallback-unsupported-characters/ 重新发布工作示例代码:

\documentclass[]{book}

\usepackage{fontspec}
\setmainfont{Junicode}
\newfontfamily\myregularfont{Junicode}
\newfontfamily\mychinesefont{IPAexMincho}

\usepackage[CJK]{ucharclasses}
\setTransitionsForCJK{\mychinesefont}{\myregularfont}

\begin{document}
Latin text. Chinese text: 紫薇北斗星  Modern greek: Διαμ πριμα εσθ ατ, κυο πχιλωσοπηια Ancient greek: Μῆνιν ἄειδε, θεά, Πηληϊάδεω Ἀχιλῆος. And regular latin text.
\end{document}

答案1

该包pmboxdraw包含此类字符的定义,这些字符被绘制为线条。在 pdfLaTeX 中,如果您在正文中使用这些字符,则可以直接使用。在里面,lstlisting您需要在 中单独定义这些字符lstset,请参阅如何在 lstlisting 环境中使用扩展 ASCII 字符?。更多角色请参阅pmboxdraw 手动的其中包含大约 140 个字符的宏。

pdfLaTeX 的 MWE:

\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage{listings}
\usepackage{pmboxdraw}

\begin{document}

    These aren't - ├ └

\lstset{literate={┐}{\textSFiii}1%
  {└}{\textSFii}1%
  {┴}{\textSFvii}1%
  {┬}{\textSFvi}1%
  {├}{\textSFviii}{1}%
  {─}{\textSFx}1%
  {│}{\textSFxi}1%
  {┼}{\textSFv}1,}

    \begin{lstlisting}
        Listing: ├ └
    \end{lstlisting}
\end{document}

结果:

在此处输入图片描述

对于 XeLaTeX 来说,这有点困难,因为fontspec它阻止pmboxdraw处理字符。但是,你可以\newunicodechar使用pmboxdraw宏单独设置它们,类似于listings解决方案。

\documentclass{article}

\usepackage{fontspec}
\setmainfont{Linux Libertine O}

\usepackage{listings}
\usepackage{pmboxdraw}
\usepackage{newunicodechar}
\newunicodechar{└}{\textSFii}
\newunicodechar{┴}{\textSFvii}
\newunicodechar{┬}{\textSFvi}
\newunicodechar{├}{\textSFviii}
\newunicodechar{─}{\textSFx}
\newunicodechar{┼}{\textSFv}
\newunicodechar{│}{\textSFxi}

\begin{document}
    These characters are working - +ľščťžýáí˝¨˘˛˙´°'

    These aren't - ├ └

\lstset{literate={┐}{\textSFiii}1%
  {└}{\textSFii}1%
  {┴}{\textSFvii}1%
  {┬}{\textSFvi}1%
  {├}{\textSFviii}{1}%
  {─}{\textSFx}1%
  {│}{\textSFxi}1%
  {┼}{\textSFv}1,}

    \begin{lstlisting}
        Listing: ├ └
    \end{lstlisting}
\end{document}

结果:

在此处输入图片描述

相关内容