Unicode 多字母词典

Unicode 多字母词典

我正在尝试生成多语言、多字母的文本,但我对当前版本不满意......

我的梦想是什么:

\documentclass{book}
\usepackage[russian,greek,portuguese]{babel}
\usepackage[utf8]{inputenc}
\usepackage[UNICODE]{fontenc}  %%% FIXME!
\begin{document}
   abelha -- μελισσα -- пчела
\begin{verbatim}
   abelha -- μελισσα -- пчела ∈ {animals}
\end{verbatim}
\end{document}

为了使这项工作顺利进行,我添加了许多 \foreignlanguage{greek}{...}我想避免的痛苦,这些痛苦在 verbatins 和类似内容中无法使用。什么是正确举动?

答案1

如果您有覆盖您正在使用的脚本的字体,则可以使用 lualatex。请注意,虽然它显示所有字形,但它不会改变连字模式和类似内容。如果需要,您仍然必须标记语言。fallback示例中使用的选项需要非常最近的 luaotfload 还处于实验阶段。您可以忽略它,但您必须使用宏或将其激活。

\documentclass{book}
\usepackage[russian,greek,portuguese]{babel}
\usepackage{fontspec}

% fallback for the ∈
 \directlua
    {luaotfload.add_fallback
     ("myfallback",
       {
        "DejaVuSansMono:mode=node;",
       }
     )
    }
\setmainfont{cmuserif}[RawFeature={fallback=myfallback}]    
\setmonofont{cmutypewritertext}[RawFeature={fallback=myfallback}]    
\begin{document}
   abelha -- μελισσα -- пчела ∈
\begin{verbatim}
   abelha -- μελισσα -- пчела ∈ {animals}
\end{verbatim}

\end{document}

在此处输入图片描述

答案2

可以使用最近的babel和来完成luatex。下面是一个展示其功能的示例。

\documentclass{book}

\usepackage[russian,greek,portuguese]{babel}

% Tell babel to select the hyphenation rules and the font based on
% the chars script.
\babelprovide[onchar=ids fonts]{greek}
\babelprovide[onchar=ids fonts]{russian}

% If you want serveral fonts:
\babelfont{rm}{DejaVu Serif}
\babelfont[greek]{rm}{FreeSerif}
\babelfont[russian]{rm}{FreeSans}

% If a single font is enough:
\babelfont{tt}{DejaVu Sans Mono}

\begin{document}
   abelha -- μελισσα -- пчела ∈
\begin{verbatim}
   abelha -- μελισσα -- пчела ∈ {animals}
\end{verbatim}
\end{document}

onchar=ids fonts设置字体以及换行规则。请参阅babel 3.38 中的新功能

在此处输入图片描述

我不确定 ∈ 的用途,但如果您愿意,可以将其分配给greekrussian,例如:

\babelcharproperty{`\∈}{locale}{russian}

答案3

对于 XeLaTeX 你可以做类似的事情Ulrikes 的回答用于 LuaLaTeX。同样在这种情况下,您需要找到一种涵盖不同脚本的字体,例如 DejaVu 变体之一,或用于衬线等宽字体的 CMU Typewriter Text。然后可以像问题中那样给出输入,而无需任何字体或语言切换命令 - 但是连字符将无法正常工作,正如 Ulrike 在她的回答中提到的那样。

LuaLaTeX 的不同之处在于处理字体中没有的字符。在 XeLaTeX 中,您无法指定后备字体,但使用该ucharclasses包可以为一系列字符指定字体。例如,如果您希望 CMU Typewriter Text 作为单色字体,但数学符号使用 DejaVu Sans Mono:

\documentclass{article}
\usepackage[russian,greek,portuguese]{babel}
\usepackage{fontspec}
\usepackage{ucharclasses}

\setmainfont{DejaVu Serif}
\setmonofont{CMU Typewriter Text}
\newfontfamily\mathmonofont{DejaVu Sans Mono}

\begin{document}
abelha -- μελισσα -- пчела ∈

\setTransitionsForMathematics{\begingroup\mathmonofont}{\endgroup}
abelha -- μελισσα -- пчела ∈
\begin{verbatim}
   abelha -- μελισσα -- пчела ∈ {animals}
\end{verbatim}
\end{document}

结果:

在此处输入图片描述

有许多不同的预定义类别可用于切换字体,例如希腊文、阿拉伯文、西里尔文、中文、切罗基文、标点符号等脚本/块(请参阅手动的适用于所有预定义类别)。这对于数学很有用,但当您有一种字体涵盖拉丁文,另一种字体涵盖西里尔文时也很有用。您还可以使用它来自动插入\selectlanguage命令以使用正确的连字模式。

但请注意,该\setTransitionsForMathematics命令(以及其他类的类似命令)适用于所有字体,也适用于具有该字符的字体。在上面的示例中,可以看到在输出的第一行中使用了 DejaVu Serif 的 ∈,但在过渡命令之后,使用了 DejaVu Sans Mono 的 ∈。这可能是或可能不是所希望的 - 为了保持一致性,这还不算太糟,但如果过渡字体与正常字体有很大不同,则可能会损害段落的可读性。当不再需要过渡规范时,您可以使用 取消设置过渡规范\setTransitionsForMathematics{}{},但这当然会破坏只键入任何文本而不在其间输入字体/语言相关命令的要求。

相关内容