我正在尝试生成多语言、多字母的文本,但我对当前版本不满意......
我的梦想是什么:
\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 中的新功能。
我不确定 ∈ 的用途,但如果您愿意,可以将其分配给greek
或russian
,例如:
\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{}{}
,但这当然会破坏只键入任何文本而不在其间输入字体/语言相关命令的要求。