soul 包和带有 xelatex 的西里尔字母

soul 包和带有 xelatex 的西里尔字母

如何处理带有西里尔符号的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-ulLuaLaTeX 中的包。

\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}

在此处输入图片描述

相关内容