Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unicode 扩充a字体在某些情况下无法正常显示 #54

Closed
HomelandScenery opened this issue Sep 8, 2016 · 58 comments
Closed

Unicode 扩充a字体在某些情况下无法正常显示 #54

HomelandScenery opened this issue Sep 8, 2016 · 58 comments

Comments

@HomelandScenery
Copy link

非常感谢作者的插件。目前遇到一些疑问,当我使用“方正兰亭黑_GBK”字体作为中文主要字体后,当遇到unicode 扩充a字体(中日韩统一表意文字扩展A),不能正常显示。只有使用其他包含有相对应的扩充A字体的字体文件时(如微软雅黑、楷体),才能正常显示扩充A文字,请问如何解决?能否对扩充A文字单独设置一个字体(如HanaMinA.ttf)?

操作环境:Windows10,GNU Emacs 25.0.94.2 (x86_64-w64-mingw32)
screenshot - 2016_9_8 22_21_10

screenshot - 2016_9_8 22_21_34

@tumashu
Copy link
Owner

tumashu commented Sep 9, 2016

这个,你在 EXT-B字体 里面添加设置一个试试,看行不行

在 2016-09-08 22:39:02,"故乡风月" [email protected] 写道:

非常感谢作者的插件。目前遇到一些疑问,当我使用“方正兰亭黑_GBK”字体作为中文主要字体后,当遇到unicode 扩充a字体(中日韩统一表意文字扩展A),不能正常显示。只有使用其他包含有相对应的扩充A字体的字体文件时(如微软雅黑、楷体),才能正常显示扩充A文字,请问如何解决?能否对扩充A文字单独设置一个字体(如HanaMinA.ttf)?

操作环境:Windows10,GNU Emacs 25.0.94.2 (x86_64-w64-mingw32)


You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub, or mute the thread.

@HomelandScenery
Copy link
Author

请问我应该如何设置呢。我的ext-b字体(见附图红色划线)能够正常显示,某些ext-a字体(见附图黄色划线)能显示,但大小似乎有点问题。
ext-b

ext-b2

@tumashu
Copy link
Owner

tumashu commented Sep 9, 2016

你为什么一定要使用这个字体呢,换一个其他字体不可以吗? 如果一定要使用这个字体,可能的方式是:

(defun my-set-ext-a-fonts (fontsizes-list)
  (set-fontset-font
   "fontset-default" nil
   (font-spec :name "一个EXTA字体"
              :size (nth 1 fontsizes-list)
              :weight 'normal
              :slant 'normal)
   nil 'prepend))

(add-hook 'cfs-set-font-finish-hook 'my-set-ext-a-fonts)

上面的代码没有测试,你也许需要自己调整

@tumashu
Copy link
Owner

tumashu commented Sep 9, 2016

另外吐槽一句: 你的兴趣好高大上。。。。。。

@HomelandScenery
Copy link
Author

HomelandScenery commented Sep 9, 2016

有点诡异,ext-a正常,ext-b就不正常了?使用了以下的代码,请大大参考。

䀹
𩜯
𩞉

screenshot - 2016_9_9 18_12_49

screenshot - 2016_9_9 18_17_41

之前的回复

多谢大大,已经测试成功。特别好的地方是,如果当前字体(如楷体)包含ext-a字形的,则不会改变当前字体(即维持楷体),否则就应用代码中相应字体。如无意外,可以关闭了。

另:请别吐槽:)

;;测试ext-a字体;;;;;
(defun cfs-set-ext-a-fonts (fontsizes-list)
  (set-fontset-font
   "fontset-default" nil
   (font-spec :name "HanaMinA"
              :size (nth 1 fontsizes-list)
              :weight 'normal
              :slant 'normal)
   nil 'prepend))

(add-hook 'cfs-set-font-finish-hook 'cfs-set-ext-a-fonts)

@tumashu
Copy link
Owner

tumashu commented Sep 9, 2016

有可能,因为ext-b也是用prepend设置的,也许你应该在hook中,强制设置exta部分的字体,具体怎么整,我也不知道。。。。

@tumashu
Copy link
Owner

tumashu commented Sep 9, 2016

我估计你应该类似下面的设置: (#x24b6 . #x24fe) 需要你改成 exta 的范围,具体怎么改,我对此不太了解。

(defun cfs-set-ext-a-fonts (fontsizes-list)
  (set-fontset-font
   "fontset-default" '(#x24b6 . #x24fe)
   (font-spec :name "HanaMinA"
              :size (nth 1 fontsizes-list)
              :weight 'normal
              :slant 'normal)
   nil 'prepend))

(add-hook 'cfs-set-font-finish-hook 'cfs-set-ext-a-fonts)

@tumashu
Copy link
Owner

tumashu commented Sep 9, 2016

我找到了,你运行 (list-fontsets t) 就可以弹出一个buffer,那里面就分成许多区域,自己找找

@HomelandScenery
Copy link
Author

HomelandScenery commented Sep 9, 2016

我输入了以下代码,"fontset-default" '(#x3400 . #x4DB5),仍然不能正常认别。所以,我承认失败了。

``(list-fontsets t)`运行后,看不懂应该输入哪 个范围。

(defun cfs-set-ext-a-fonts (fontsizes-list)
  (set-fontset-font
   "fontset-default" '(#x3400 . #x4DB5)
   (font-spec :name "HanaMinA"
              :size (nth 1 fontsizes-list)
              :weight 'normal
              :slant 'normal)
   nil 'prepend))

(add-hook 'cfs-set-font-finish-hook 'cfs-set-ext-a-fonts)

@tumashu
Copy link
Owner

tumashu commented Sep 9, 2016

我也搞不清楚是哪个范围,底层的东西,不太明白,实在不行,找一个其他字体用吧,省事

@tumashu
Copy link
Owner

tumashu commented Sep 9, 2016

试试下面的的代码:

(defun cfs-set-ext-a-fonts (fontsizes-list)
  (set-fontset-font
   "fontset-default" '(#x3400 . #x4DFF)
   (font-spec :name "微软雅黑"
              :size (nth 2 fontsizes-list)
              :weight 'normal
              :slant 'normal)
   nil))

(add-hook 'cfs-set-font-finish-hook 'cfs-set-ext-a-fonts)

@tumashu
Copy link
Owner

tumashu commented Sep 9, 2016

_021

@tumashu
Copy link
Owner

tumashu commented Sep 9, 2016

按红线部分,你可以了解unicode-bmb 汉字的分布

@HomelandScenery
Copy link
Author

运行了describe-char命令,但是code point in charset没有能链接点击的帮助。

@tumashu
Copy link
Owner

tumashu commented Sep 10, 2016

你选择的字符不是 unicode-bmp 范围内吧?

@HomelandScenery
Copy link
Author

成功了,我觉得可以说能打95分,可否有进步的空间。
原来的代码有个好处:如果当前字体(如楷体)包含ext-a字形的,则不会改变当前字体(即维持楷体),否则就应用代码中相应字体。
这次版本,固定死ext-a字形使用某种字体,所以我觉得是否还能再提升。
ext-a_3

@tumashu
Copy link
Owner

tumashu commented Sep 10, 2016

这个你可以通过调整 那个范围来实现, 你只要设置楷体不包含的字符的范围 不就可以了,可以设置一个比较小的范围的

@tumashu
Copy link
Owner

tumashu commented Sep 10, 2016

另外一种方式,就是使用 append 或者 prepend 参数,和 字符范围配合,应该可以实现你需要的功能

@HomelandScenery
Copy link
Author

我明明选了”䀹“这个字阿,其他的字是可以的

@tumashu
Copy link
Owner

tumashu commented Sep 10, 2016

测试这个

(defun my-set-exta-fonts (fontsizes-list)
  (let* ((fontname "微软雅黑")
         (fontsize (nth 2 fontsizes-list))
         (fontspec (font-spec :name fontname
                              :size fontsize
                              :weight 'normal
                              :slant 'normal)))
    (if (cfs--fontspec-valid-p fontspec)
        (set-fontset-font "fontset-default" '(#x3400 . #x4DFF) fontspec nil 'append) ;; 另外测试 prepend
      (message "字体 %S 不存在!" fontname))))

(add-hook 'cfs-set-font-finish-hook 'my-set-exta-fonts)

@HomelandScenery
Copy link
Author

两个都试过,都不行,维持使用"微软雅黑"

@tumashu
Copy link
Owner

tumashu commented Sep 10, 2016

不可能吧,我这里测试可以的呀?

@tumashu
Copy link
Owner

tumashu commented Sep 10, 2016

_022

@tumashu
Copy link
Owner

tumashu commented Sep 10, 2016

你说的是这意思吧?

@HomelandScenery
Copy link
Author

ext-a_4
ext-a_5

@tumashu
Copy link
Owner

tumashu commented Sep 10, 2016

我觉得是,你默认的中文字体,没有那个字吧?

@tumashu
Copy link
Owner

tumashu commented Sep 10, 2016

另外,重启一下 emacs 试试

@HomelandScenery
Copy link
Author

1.楷体是有”䀹“字能正常显示的。
2.每次测试都重启了emacs

@tumashu
Copy link
Owner

tumashu commented Sep 10, 2016

我这里,楷体不能显示,因为 cfs 里面的楷体是: 楷体-gb2312

@tumashu
Copy link
Owner

tumashu commented Sep 10, 2016

AR PL UKai CN 可以显示这个字

@tumashu
Copy link
Owner

tumashu commented Sep 10, 2016

_023

@HomelandScenery
Copy link
Author

ext-a_6
ext-a_7

'append) ;; 另外测试 append也测试过了 

@tumashu
Copy link
Owner

tumashu commented Sep 10, 2016

你让 那个字体 显示为楷体,然后 describe-char ,看看什么字体,我测试了许多楷体,可惜,没有一个能显示这个字

@HomelandScenery
Copy link
Author

HomelandScenery commented Sep 10, 2016

       position: 13 of 18 (67%), column: 0
            character: 䀹 (displayed as 䀹) (codepoint 16441, #o40071, #x4039)
    preferred charset: unicode (Unicode (ISO10646))
code point in charset: 0x4039
               script: han
               syntax: w    which means: word
             category: .:Base, C:2-byte han, L:Left-to-right (strong), c:Chinese, j:Japanese, |:line breakable
             to input: type "C-x 8 RET 4039"
          buffer code: #xE4 #x80 #xB9
            file code: #xE4 #x80 #xB9 (encoded by coding system utf-8-dos)
              display: by this font (glyph code)
    uniscribe:-outline-楷体-normal-normal-normal-mono-26-*-*-*-c-*-iso10646-1 (#x6215)

Character code properties: customize what to show
  name: CJK IDEOGRAPH-4039
  general-category: Lo (Letter, Other)
  decomposition: (16441) ('䀹')

There are text properties here:
  fontified            t
  line-prefix          ""
  wrap-prefix          ""

北京中易中标电子信息技术有限公司
© Beijing ZhongYi Electronics Co., 1995-2005, All rights reserved

中易楷体(SimKai),是由北京中易中标电子信息技术有限公司制作并持有版权的一种 TrueType字体。中易楷体是随着简体中文版Windows一起分发的字体,文件名SimKai.ttf。在Windows XP及更早操作系统中,中易楷体只包含GB2312字形,字体名称显示为楷体_GB2312。从Windows Vista起,中易楷体已涵盖GBK中的所有字形,显示名称也变为楷体。

@tumashu
Copy link
Owner

tumashu commented Sep 10, 2016

我在这里测试了一下,我这里可以

@tumashu
Copy link
Owner

tumashu commented Sep 10, 2016

_024

@tumashu
Copy link
Owner

tumashu commented Sep 10, 2016

_025

@tumashu
Copy link
Owner

tumashu commented Sep 10, 2016

你是用的 spacemacs 吗? 有没有开启spacemacs fallback 字体支持? (cfs-set-spacemacs-fallback-fonts),禁用试试

@HomelandScenery
Copy link
Author

是的,我在用spacemacs,已经禁用了(cfs-set-spacemacs-fallback-fonts),但还是维持不变没有效果,仍然统一为“微软雅黑”。十分感谢大大,已经解决了大问题,小细节就留待日后改善吧。

@tumashu
Copy link
Owner

tumashu commented Sep 10, 2016

好吧,我这里没问题,不知道你那边为什么会出现问题。。。。。

@tumashu
Copy link
Owner

tumashu commented Sep 10, 2016

这个就暂时关闭了。。。。

@tumashu tumashu closed this as completed Sep 10, 2016
@HomelandScenery
Copy link
Author

为什么我的 describe-char 显示preferred charset: unicode (Unicode (ISO10646)),而您的是unicode bmp

@tumashu
Copy link
Owner

tumashu commented Sep 10, 2016

我不知道,我默认coding 是 utf-8-unix ,也许和这个有关系

@HomelandScenery
Copy link
Author

 (prefer-coding-system 'utf-8)
  (set-default-coding-systems 'utf-8)
  (setq file-name-coding-system 'gbk)

大大,我是这样设置的,您的设置可以贴出来吗

@tumashu
Copy link
Owner

tumashu commented Sep 10, 2016

https://github.com/tumashu/emacs-helper/blob/master/eh-basic.el 另外,你也可以先禁用 spacemacs,使用纯emacs 来测试一下,spacemacs 太庞大了,不知道里面是不是有一些特殊的设置

@HomelandScenery
Copy link
Author

先谢一个,现在工作,日后继续测试,感谢!

@tumashu
Copy link
Owner

tumashu commented Sep 10, 2016

恩,这个问题先暂时就到这吧。。。。

@HomelandScenery
Copy link
Author

成功了,使用了大大的配置,终于得到想要的结果

;; Charset 设置
(use-package mule
  :ensure nil
  :config

  (set-language-environment "UTF-8")
  (set-buffer-file-coding-system 'utf-8-unix)
  (set-clipboard-coding-system 'utf-8-unix)
  (set-file-name-coding-system 'utf-8-unix)
  (set-keyboard-coding-system 'utf-8-unix)
  (set-next-selection-coding-system 'utf-8-unix)
  (set-selection-coding-system 'utf-8-unix)
  (set-terminal-coding-system 'utf-8-unix)

  (when (eq system-type 'windows-nt)
    (set-selection-coding-system 'gbk-dos)
    (set-next-selection-coding-system 'gbk-dos)
    (set-clipboard-coding-system 'gbk-dos)))

exta_8

@tumashu
Copy link
Owner

tumashu commented Sep 12, 2016

这个问题确实有点诡异。。。。

@RickLeaf
Copy link

RickLeaf commented Jul 5, 2018

image

image
这个问题有人遇到过吗,之前都是好的,字体也已经安装

@tumashu
Copy link
Owner

tumashu commented Jul 5, 2018

一个可能的问题是: 你当前的 EXTB字体名称不在列表里面: ("HanaMinB" "SimSun-ExtB" "MingLiU-ExtB" "PMingLiU-ExtB" "MingLiU_HKSCS-ExtB")

有时候,相同的字体在不同的系统里面,字体名称是不一样的

@tumashu
Copy link
Owner

tumashu commented Jul 5, 2018

用 cnfonts-insert-fontname 可以查看查看

@RickLeaf
Copy link

RickLeaf commented Jul 5, 2018

cnfonts-insert-fontname 的确是有 HanaMinB 的,我同时也安装了HanaMinA,好像改哪个都没有用。

@RickLeaf
Copy link

RickLeaf commented Jul 5, 2018

不知道是不是和coding有关系,我关闭其他配置看看

@tumashu
Copy link
Owner

tumashu commented Jul 5, 2018

用 emacs -Q 测试一下,看是不是其他地方的配置覆盖了cnfonts的设置了

@RickLeaf
Copy link

RickLeaf commented Jul 5, 2018

没太懂,用emacs -Q怎么测试啊

@RickLeaf
Copy link

RickLeaf commented Jul 5, 2018

问题还是比较诡异的,emacs -Q ,直接设置这个字体也没有作用。

@RickLeaf
Copy link

RickLeaf commented Aug 6, 2018

好在26版本工作已经正常了

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants