ctex-kit
ctex-kit copied to clipboard
xeCJKfntef: 下划线中字体命令出错
xeCJkfnt 的部分命令会使 \bfseries 等字体命令只对后面等第一个字符生效,并且相邻命令之间的空格会保留,而只有 \CJKunderdot 有所不同:
\documentclass{article}
\usepackage{xeCJK,xeCJKfntef}
\begin{document}
\ExplSyntaxOn
\tl_map_inline:nn
{ \CJKunderwave \CJKunderline \CJKunderdblline \CJKunderwave \CJKsout \CJKxout \CJKunderdot }
{ #1 { 文字 { \bfseries 文字 } } ~ #1 { 文字 { \sffamily 文字 } } \par }
\ExplSyntaxOff
\end{document}

-
\CJKunderdot的实现方式(\xeCJK_under_symbol:nnnnnn)与其他命令不同,可能是这个造成了差异 -
xeCJKfntef基于ulem。下列例子展示了,- 只使用 ulem 和 xecjk 就能复现问题
- 通过
xeCJKactive=false关闭 xecjk 的字符机制后,问题消失)
所以问题可能出在 ulem 和 xecjk 的搭配使用上。
\documentclass{article}
\usepackage{ulem, xeCJK}
\setmainfont[BoldFont=FandolHei]{FandolSong}
\setCJKmainfont[BoldFont=FandolHei]{FandolSong}
\begin{document}
\newcommand\cmd{\bgroup \markoverwith{-}\ULon}
\xeCJKsetup{xeCJKactive=true}
\cmd{中文\textbf{中文}}
\xeCJKsetup{xeCJKactive=false}
\cmd{中文\textbf{中文}}
\end{document}

与 https://github.com/CTeX-org/ctex-kit/issues/249 类似,原理所限,目前没有简便的处理方法,除非整个重构 xeCJKfntef,不依赖 ulem 包的机制,完全通过 \XeTeXinterchartoks 来处理。
所以问题可能出在
ulem和xeCJK的搭配使用上。
现在这个例子给出的结果是正确的(换了字体):

但上面直接用 xeCJKfntef 仍然显示错误。