CTeX-org / ctex-kit

Macro Packages and Scripts for Chinese TeX users
965 stars 124 forks source link

如何使用中文字体的stylistic set #666

Closed Firestar-Reimu closed 1 year ago

Firestar-Reimu commented 1 year ago

https://www.bilibili.com/read/cv14016015

该文章指出方正字体开启ss01才能获得正确的标点间距

但是ctex可以像fontspec那样指定字体stylistic set吗?

muzimuzhi commented 1 year ago

xecjk 和 luatex-ja 中文方案都可以

Firestar-Reimu commented 1 year ago

请问有什么代码示例吗?官方文档似乎没有讲

我是同时用了fontspec和ctex (lualatex)

\usepackage{fontspec}
\setmainfont{Times New Roman}
\setsansfont{Arial}

\usepackage[fontset=none]{ctex}
\setCJKmainfont{FZShuSong-Z01}[BoldFont=Noto Sans CJK SC Medium,ItalicFont=FZKai-Z03]
\setCJKsansfont{Noto Sans CJK SC Regular}[BoldFont=Noto Sans CJK SC Medium,ItalicFont=FZKai-Z03]
\setCJKmonofont{Noto Sans Mono CJK SC}[BoldFont=Noto Sans Mono CJK SC Bold,ItalicFont=FZFangSong-Z02]
\newCJKfontfamily\kaishu{FZKai-Z03}
\newCJKfontfamily\fangsong{FZFangSong-Z02}

我发现如果我加\addfontfeature{StylisticSet=1},那么这只会作用到fontspec上,即Times new roman

muzimuzhi commented 1 year ago

fontspec 的所有字体属性选项,都可在 xecjk 的字体属性选项里使用,例如 \setCJKmainfont{...}[..., Alternate=xxx]。相关文档 https://github.com/CTeX-org/ctex-kit/blob/008d3b9248c2f1ad70ff46fa17588dd4b4bfeac3/xeCJK/xeCJK.dtx#L682-L696

PS:和 \addfontfeature 对应,xecjk 提供了 \addCJKfontfeature

sikouhjw commented 1 year ago
\documentclass[fontset=none]{ctexart}
\setCJKmainfont{FZShuSong-Z01}
\addCJKfontfeature{StylisticSet=1}
\begin{document}
在建筑领域,人们认为自然的材料具有各种贴近人性的优点,而人造的材料则能提供自由发挥的空间,并就这两者孰优孰劣展开了激烈的争辩;这场现代大辩论厘定了两种不同的匠艺。在韦尔的时代,用砖块来盖房子似乎更符合当时人们对真诚性的追求,卢梭的政治作品反映了这种追求。砖块体现了生活在光明时代的人们的一种愿望,就是渴望过着朴素和谐的生活(这可以从夏尔丹的画作看出来),以及渴望展现自己的本来面貌(这可以从那时妇女在家所穿的贴身纱衣看出来)。
\end{document}

报警告

Package fontspec Warning: OpenType feature 'Variant=1' (ss01) not available
(fontspec)                for font 'FZShuSong-Z01' with script 'CJK' and
(fontspec)                language 'Default'.

是我电脑的字体不对吗?

Firestar-Reimu commented 1 year ago

请问lualatex下又如何实现呢?

muzimuzhi commented 1 year ago

报警告

Package fontspec Warning: OpenType feature 'Variant=1' (ss01) not available
(fontspec)                for font 'FZShuSong-Z01' with script 'CJK' and
(fontspec)                language 'Default'.

是我电脑的字体不对吗?

有可能。可以用工具查看字体支持的所有 opentype feature,如 https://fontdrop.info/kpsewhich opentype-info.tex (fontspec 文档 sec. 1.2VI.1.2 "How do I know what font features are supported by my fonts?" 介绍了用法)。

我电脑上没有方正书宋等字体,无法尝试。

muzimuzhi commented 1 year ago

请问lualatex下又如何实现呢?

https://github.com/CTeX-org/ctex-kit/blob/008d3b9248c2f1ad70ff46fa17588dd4b4bfeac3/ctex/ctex.dtx#L2727-L2735 可以在 ctex-engine-luatex.def 中得到佐证,对应 ctex(v2.5.10,2022/07/14)文档 69 页末尾开始。 https://github.com/CTeX-org/ctex-kit/blob/008d3b9248c2f1ad70ff46fa17588dd4b4bfeac3/ctex/ctex.dtx#L5874-L5947

sikouhjw commented 1 year ago

有可能。可以用工具查看字体支持的所有 opentype feature,如 https://fontdrop.info/kpsewhich opentype-info.tex (fontspec 文档 sec. 1.2 "How do I know what font features are supported by my fonts?" 介绍了用法)。

我用 https://fontdrop.info/ 打开 FZSSK.TTF,发现

The font FZShuSong-Z01 contains 0 ligatures in 0 OpenType features

https://www.zhihu.com/question/281979772/answer/423734678 的评论区找到

我最近去重新下载之前购买过的字体,也发现方正官网下载界面改版去掉了格式选择。但是你还是有办法下载 OTF 格式的字体。

可能是方正把 OTF 格式的字体不开放下载了。现在在方正官网下载字体需要安装「字加」软件,也没有提供格式选择的功能。

想找到 OTF 格式的字体,可能官方途径走不通了。

muzimuzhi commented 1 year ago

可以用工具查看字体支持的所有 opentype feature,如 https://fontdrop.info/kpsewhich opentype-info.tex (fontspec 文档 sec. 1.2 "How do I know what font features are supported by my fonts?" 介绍了用法)。

更正:应该是 sec. VI.1.2,fontspec 文档里的 chapter 在每个 part 内单独计数。

那一节里也提到了命令行工具 otfinfo,由 https://ctan.org/pkg/lcdf-typetools 提供,texlive 和 miktex 都收录了。