ctex-kit icon indicating copy to clipboard operation
ctex-kit copied to clipboard

xeCJKfntef: 下划线中字体命令出错

Open stone-zeng opened this issue 6 years ago • 3 comments

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}

image

stone-zeng avatar Nov 08 '19 12:11 stone-zeng

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

image

muzimuzhi avatar Nov 09 '19 04:11 muzimuzhi

与 https://github.com/CTeX-org/ctex-kit/issues/249 类似,原理所限,目前没有简便的处理方法,除非整个重构 xeCJKfntef,不依赖 ulem 包的机制,完全通过 \XeTeXinterchartoks 来处理。

qinglee avatar Feb 17 '20 14:02 qinglee

所以问题可能出在 ulemxeCJK 的搭配使用上。

现在这个例子给出的结果是正确的(换了字体):

image

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

stone-zeng avatar Jul 14 '20 08:07 stone-zeng