![soul 包和带有 xelatex 的西里尔字母](https://linux22.com/image/443310/soul%20%E5%8C%85%E5%92%8C%E5%B8%A6%E6%9C%89%20xelatex%20%E7%9A%84%E8%A5%BF%E9%87%8C%E5%B0%94%E5%AD%97%E6%AF%8D.png)
如何处理带有西里尔符号的soul
包裹?
\documentclass[a4paper,10pt]{book}
\usepackage{polyglossia}
\defaultfontfeatures{Ligatures={TeX}}
\setmainfont{Liberation Serif}
\setmonofont{Liberation Mono}
\setmainlanguage{ukrainian}
\usepackage{soulutf8}
\begin{document}
\mainmatter
Короткий зміст\par
Brief content\par
\so{Короткий зміст}\par
\so{Brief content}
\end{document}
使用以下方式编译
xelatex test.tex
我认为这是由于内部的包使用的字体soul
。可以使用来设置此字体\font\SOUL@tt=
,但我不知道如何使用此命令来使用字体。
我添加\tracinglostchars=2
并看到了这个:
Missing character: There is no К in font ectt1000!
Missing character: There is no о in font ectt1000!
...
Missing character: There is no с in font ectt1000!
Missing character: There is no т in font ectt1000!
答案1
您可以本地添加该LetterSpace
功能。
\documentclass[a4paper,10pt]{book}
\usepackage{polyglossia}
%\defaultfontfeatures{Ligatures={TeX}} % not needed
\setmainfont{Liberation Serif}
\setmonofont{Liberation Mono}
\setmainlanguage{ukrainian}
\NewDocumentCommand{\so}{m}{%
{\addfontfeatures{LetterSpace=10,Ligatures=NoCommon}#1}%
}
\begin{document}
\mainmatter
Короткий зміст
Brief content ffi ffl
\so{Короткий зміст}
\so{Brief content ffi ffl}
Короткий зміст
Brief content ffi ffl
\end{document}
对于具有连字的字体来说这Ligatures=NoCommon
是必需的,如下例所示,使用 Libertinus Serif 代替 Liberation:
请注意,偷羊并不是好行为。
答案2
使用 LuaLaTeX 和microtype
您可以用来\textls
代替的包\so
。如果您还需要突出显示、下划线或删除线,soul
则可以改用lua-ul
LuaLaTeX 中的包。
\documentclass[a4paper,10pt]{book}
\usepackage[letterspace=200]{microtype}
\usepackage{polyglossia}
\defaultfontfeatures{Ligatures={TeX}}
\setmainfont{Liberation Serif}
\setmonofont{Liberation Mono}
\setmainlanguage{ukrainian}
\begin{document}
\mainmatter
Короткий зміст\par
Brief content\par
\textls{Короткий зміст}\par
\textls{Brief content}
\end{document}