系统为win10;
Emacs版本为:29.0.92;
配置为:Spacemacs (0.999)最新版本;
字体配置用的是 cnfonts,并且中文字体选用 KaiTi,字体大小为15;英文字体选用 Consolas,字体大小为14,字体配置信息如下图所示:
现在的问题是中文双引号的字体仍为英文字体的设置,即Consolas,带来的问题是中文的双引号只占半个字符(类似中文的半角字符,具体见下图!),正常中文双引号的左、右双引号都应该各占一个字符,因此想到单独设置中文双引号字体的方法。查阅相关方法(如 Emacs,字体与字符集 ),均不能达到目的,因此在此求助各位大佬,如何设置才能使用中文的双引号使用中文字体的设置 或 能够设置成任意字体?
首先,describe-char
(快捷键 C-h ‘
)这个函数可以查看光标下字符的具体信息,可以看看它到底是用了什么字体。(因为有可能你的中文字体确实是KaiTi,但是这个字体的中文双引号确实只占一个字符!)
另外,如果要设置某个字符采取某个字体,可以试试这条语句:(set-fontset-font t ?“ "Sarasa Mono SC")
,把其中的字体换成你想要的。
1 个赞
全角引号
英文中的单引号有两种,'
(U+0027) 和’
(U+2019)。可能会觉得前一种出现在英文文本中,后一种出现在中文文本中,并且宽度和中文等宽。然而,英语世界中的一些人在英文文章中也是会使用后一种的。所以,字体在显示后一种引号的时候,究竟是和英文字母一样窄,还是该和中文字体等宽呢?如果在英文文章中显示成全宽字符则会显得突兀。
比如,思源黑体其实也包含了拉丁字母的字形,可以完全使用思源黑体去显示西文。此时,后一种单引号的宽度会显示成中文字形的宽度。导致即使在全英文环境中,单引号也会突兀地在文本中过宽。
同样地,‘
(U+2018) “
(U+201C) ”
(U+201D) 也有类似的情况。
https://catcat.cc/post/2021-03-07/ 虽然是一篇关于fontconfig的文章,但里面正好也提到了你这个问题当中涉及到的引号问题,可以参考下。
使用上述命令单独设置引号的字体,结果为 nil,大佬可否告知原因!!
(set-fontset-font t 'chinese-gb2312 (font-spec :family "楷体") nil)
使用此命令仍然无法设置字体,并尝试将 楷体 改为 KaiTi,仍然无法设置中文引号的字体!(如下图所示)
用 describe-char 命令查看 中文引号的信息如下:
position: 68 of 68 (99%), column: 2
character: ” (displayed as ”) (codepoint 8221, #o20035, #x201d)
charset: chinese-gbk (GBK Chinese simplified.)
code point in charset: 0xA1B1
script: symbol
syntax: . which means: punctuation
category: .:Base, >:Not at bol, c:Chinese, h:Korean, j:Japanese
to input: type "C-x 8 RET 201d" or "C-x 8 RET RIGHT DOUBLE QUOTATION MARK"
buffer code: #xE2 #x80 #x9D
file code: #xE2 #x80 #x9D (encoded by coding system utf-8)
display: by this font (glyph code):
harfbuzz:-outline-Consolas-regular-normal-normal-mono-19-*-*-*-c-*-iso8859-1 (#x16A)
Character code properties: customize what to show
name: RIGHT DOUBLE QUOTATION MARK
old-name: DOUBLE COMMA QUOTATION MARK
general-category: Pf (Punctuation, Final quote)
decomposition: (8221) ('”')
There is an overlay here:
From 67 to 69
face hl-line
priority -50
window #<window 3 on *scratch*>
There are text properties here:
face font-lock-warning-face
fontified nil
help-echo "Confusable character"
org
2023 年7 月 9 日 13:57
7
这个全角/半角的问题,李杀的网站里有这么一段可供参考,但是不是单独设置字体的方式。
http://xahlee.info/emacs/emacs/elisp_convert_full_width_half_width_chars.html
另外,我还真好奇"这个字符在哪个字体是全角的?因为kitty的字体限制的很好,我在终端里测试了几个字体,都是显示半角。
我觉得可能和 cnfonts 有关,请求 @tumashu 大佬帮助!
我猜测可能是 spacemacs 自带和字体设置和 cnfonts 字体设置出现了冲突,最好 emacs -Q 逐步加载包来测试测试
Deeson
2023 年7 月 14 日 07:53
10
我测试了,这个函数无论成功与否,似乎都返回 nil
。
其次,不知道""
里面的“楷体”这种写法是不是合法的输入,可以尝试 set-frame-font
这个函数,按照它弹出的列表填写就肯定能用。
比如:(set-fontset-font t ?“ "Source Code Pro")
Deeson
2023 年7 月 16 日 00:36
12
我看了一下 set-fontset-font
的文档,如果是 emacs -Q
启动的话,应该使用:
(set-fontset-font nil ?“ “Source Code Pro”)
改变了第一个参数,可以看一下第一个参数的含义。
这个问题还是没有解决,继续请各位大佬出手帮忙,不胜感激。
Deeson
2024 年3 月 30 日 13:59
14
我发现你的“楷”字有效,而下面的引号没有效果。
这可能是因为引号是一个符号,而 emacs 有一个变量 use-default-font-for-symbols
,通过 emacs -Q
启动的话,默认为 t
,你可以把它改为 nil
,可能就有效果了。
参看第8条:
转载自我的Blog,我的一句话经验——Emacs Lisp篇 。
用boundp判断变量是否定义,可以作为一种错误处理方法。
用(eval-when-compile (require 'subr-x))在编译时引用某功能,避免warning。
编译Emacs的时候,老的elc文件可能会导致问题,一个简单的方法是删掉它们,在lisp目录里执行find . -name '*elc' -delete就可以了。
配置文件如果出错会导致Emacs启动失败,用ignore-errors把可能出错的括起来就好啦。
写Emacs Lisp代码时一定要看The Emacs Lisp Style Guide 学习如何写大家都接受的代码。官方也有Tips and Conventions 。
在自己写的函数里面使用用户输入的参数,比如用不用C-u行为不同,可以在调用Emacs函数的时候使用call-interactively,这样Emacs就会把用户的参数传递过去。示例代码如下
(defun my-bash ()
(interactive)
(let ((shell…
org
2024 年3 月 30 日 14:27
15
这问题就解决不了,单引号双引号本身就只占半个中文字符。终端,浏览器,emacs 上都一样。
Deeson
2024 年3 月 30 日 15:14
16
我认为,他目前的问题是无法单独为引号设置字体,我的回复也是基于“如何给引号单独设置字体”。
而引号占据的宽度,不同字体确实不一样,比如 Source Han Sans
这个字体中,中文引号就是和中文汉字一样宽。
org
2024 年3 月 30 日 15:27
17
我验证了下你的说法,方法可行。
(setq use-default-font-for-symbols nil)
;; 中文符号分类 symbol,单独设置为 Source Han Sans CN 支持全角
(set-fontset-font t 'symbol (font-spec :family "Source Han Sans CN"))
;; 汉字分类 han,单独设置为 Sarasa Gothic SC Nerd Font
(set-fontset-font t 'han (font-spec :family "Sarasa Gothic SC Nerd Font"))
楼主注意自己用的是windows,字体名称要去系统里看,与我提到的字体名称可能不一致。
1 个赞