20 为什么ctex宏集在pdflatex条件下生成的PDF,可以使用founder和windows系列的系统本地字体?是否可以模仿该行为,增加一个自定义的pdflatex下ctex宏集的中文字体配置策略?

发布于 2025-05-30 10:46:37

使用下列代码:

\documentclass{article} 
\usepackage[fontset=founder, UTF8]{ctex} 
\usepackage[b6paper, scale=.9, landscape]{geometry}
\begin{document} 

This is a new .tex document. 

\songti 你好,世界!

\heiti 你好,世界!

\fangsong 你好,世界!

\kaishu 你好,世界!

\end{document} 

可以得到这个内容:
image.png
可知这是由pdflatex生成的使用了founder系列字体的PDF文件。
众所周知,pdflatex没有调用系统本地字体的能力

  1. 那么这些汉字支持是怎么实现的?
  2. 是不是依靠...\texlive\2024\texmf-dist\tex\generic\ctex\zhmap下的ctex-zhmap-founder.tex文件实现的?
  3. 如果是,那么是否能够写一个与ctex-zhmap-founder.tex类似的文件,使ctex宏集支持用户自定义的中文字体配置策略,并在pdflatex条件下生效?例如,希望使用fontset=source选项,在pdflatex条件下,使生成的PDF能够显示本地的思源系列字体。

查看更多

关注者
0
被浏览
118
1 个回答
Sagittarius Rover
我要成为Typst糕手/(ㄒoㄒ)/~~

可能有关:https://github.com/CTeX-org/ctex-kit/issues/434#issuecomment-493402258

注:「source-han」和「noto-serif-CJK-SC(实际上就是fontset=ubuntu调用的)」均为「思源字体」,只是分发的公司不同而已。


那么这些汉字支持是怎么实现的?

感觉问的有点泛了...我不懂字体....

也许有关: https://liam.page/2016/12/11/LaTeX-traditional-font-scheme/

是不是依靠...\texlive\2024\texmf-dist\tex\generic\ctex\zhmap下的ctex-zhmap-founder.tex文件实现的?

是。在sec4.3中,zhmap=true时默认行为调用了zhmetrics读取ctex-zhmap- #4 .tex中的配置:

image.png

源码可参见ctex文档的sec14.3.2:ctex-engine-pdftex.def:

% \ctex_load_zhmap:nnnn 
% 载入 zhmetrics 的字体映射文件,同时设置 \CJKrmdefault 等。
512 \cs_new_protected:Npn \ctex_load_zhmap:nnnn #1#2#3#4
513 {
514 \tl_set:Nn \CJKrmdefault {#1}
515 \tl_set:Nn \CJKsfdefault {#2}
516 \tl_set:Nn \CJKttdefault {#3}
517 \ctex_set_zhmap:n { \ctex_file_input:n { ctex-zhmap- #4 .tex } }
518 }
519 \@onlypreamble \ctex_load_zhmap:nnnn
520 }

附:
在v2.5的changlog中提到:

General: ubuntu 改用思源(Noto CJK)和文鼎字库,不再支持使用 pdfLATEX 编译。

这个修改的代码内容可见这个链接,也许研究下修改之前的配置可以部分回答你的原问题. 粗看上面的修改,之前的fontset=ubuntu是因为使用的是「文泉驿」字体(支持pdftex),修改为「Noto」之后不支持了。

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览