polyglossia
我在使用像/babel
这样的多语言包时遇到了很大的麻烦hyperref
。
第一次审判:babel
当我学习使用babel
希伯来语时,我遇到了所描述的问题这里和这里这让我意识到目前不可能使用 babel 来编写多语言双向文档hyperref
。
第二次及当前审判:polyglossia
尝试使用polyglossia
我的文档时,我遇到了有关字体配置的奇怪问题,我仍然无法完全解决。这是我最不确定的部分:
设置
我使用带有以下texlive
软件包的 archlinux:
$ pacman -Qsq texlive
texlive-bibtexextra
texlive-bin
texlive-core
texlive-culmus
texlive-fontsextra
texlive-formatsextra
texlive-humanities
texlive-langextra
texlive-latexextra
texlive-music
texlive-pictures
我使用xelatex
为了生成文档 因为pdflatex
并且lualatex
与 一起工作polyglossia
。
例子
在下面的文档中,我试图尽可能简化问题,而不使用不必要的包。
\documentclass[a4paper]{book}
% General
\usepackage{hyperref}
% Language
\usepackage{polyglossia}
\setdefaultlanguage{hebrew}
\setotherlanguage{english}
\setmainfont{DejaVu Sans}
\begin{document}
\title{הספר שלי}
\author{דורון בכר}
\maketitle
שלום רב,\\
קוראים לי דורון.
% The following 2 lines demonstrate the problem fairly:
% -----------------------------------------------------
%\textenglish{This is a sentence with a url inside it: \url{https://github.com/doronbehar} and it causes problems}
%\textenglish{This is a sentence without a url and it doesn't make problems if all of the document doesn't use hyperref}
\end{document}
问题
如果取消注释最后一句(就在上方end{document}
),则编译时不会出现任何问题。我没有收到任何字体错误,并且我可以在输出文档中看到所有字符。但,如果我尝试取消注释带有 URL 的句子,我会收到以下警告和错误:
Package polyglossia Warning: No hyphenation patterns were loaded for `Hebrew'
(polyglossia) I will use \language=\l@nohyphenation instead on input line 21.
加载几个包后,我得到:
Package hyperref Warning: Rerun to get /PageLabels entry.
(/usr/share/texmf-dist/tex/latex/euenc/eu1lmtt.fd)
! Package polyglossia Error: The current roman font does not contain the Hebrew script!
(polyglossia) Please define \hebrewfont with \newfontfamily.
See the polyglossia package documentation for explanation.
Type H <return> for immediate help.
...
l.32 ...de it: \url{https://github.com/doronbehar}
我无法摆脱开始时的警告以及错误。
笔记:
我见过一个使用这两个包的实例overleaf.com
这里。但作者并未使用实际的超链接或 URL。
答案1
我认为这个警告是多语种语言处理中的一个错误,但是无害。
错误是由于 \url 是用打字机字体书写的。 polyglossia 无法正确处理此问题:尽管您处于英语环境中,它仍会测试打字机字体是否可用于希伯来语。您可以找到很多有关“当前罗马字体”问题的问题。解决此问题最简单的方法是使用具有以下脚本的字体:
\documentclass[a4paper]{book}
\usepackage{polyglossia}
\usepackage{hyperref}
\setdefaultlanguage{hebrew}
\setotherlanguage{english}
\setmainfont{DejaVu Sans}
\setmonofont{DejaVu Sans}%<--
\begin{document}
\textenglish{This is a sentence with a url inside it: \texttt{blub} and it causes problems}
\end{document}
答案2
即使 URL 是在英语环境中排版的,您也需要告诉它在希伯来语中使用哪种无字体和等宽字体。例如:
\documentclass{book}
% load last unless you know something needs to be loaded later
\usepackage{hyperref}
% bidi needs to be loaded later
\usepackage{polyglossia}
\setmainlanguage{hebrew}
% US English
\setotherlanguage{english}
\setmainfont{DejaVu Serif}
\setsansfont{DejaVu Sans}
\setmonofont{DejaVu Sans Mono}
\newfontfamily\hebrewfont{DejaVu Sans}[Script=Hebrew]
\newfontfamily\hebrewfontsf{DejaVu Sans}[Script=Hebrew]
\newfontfamily\hebrewfonttt{DejaVu Sans}[Script=Hebrew]
\begin{document}
\title{הספר שלי}
\author{דורון בכר}
\maketitle
שלום רב,
קוראים לי דורון.
\textenglish{This is a sentence with a url inside it: \url{https://github.com/doronbehar} and it causes problems}
\textenglish{This is a sentence without a url and it doesn't make problems if all of the document doesn't use hyperref}
\end{document}
但是,我并不确信它在这种情况下使用了我期望的字体: