这个问题与这个问题相关: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}
结果: