PunctStyle=quanjiao
时,全角右标点与西文逗号之间没有“标点挤压”:
\documentclass{ctexart}
\begin{document}
查看《手册》, 可以知道
\end{document}
希望实现的效果为
\XeTeXinterchartoks
机制可以做到,但是代码怎么写呢?有没有其他方法呢?
详情xeCJK
宏包手册的3.5 标点符号的处理
。
这里我有种错觉:既然您都知道PunctStyle
这个key的存在,那应该能顺势从xeCJK
手册后面摸排到专门处理标点符号的方法才对...
仅针对个别case的话(例如这里的《
,》
),可以使用\xeCJKsetwidth
命令来修改其宽度。
MWE:
\documentclass{ctexart}
\xeCJKsetwidth{《》}{0.5em} %一次可对多个标点符号同时修改
\begin{document}
查看《手册》, 可以知道。
\end{document}
效果:
但如果是一般的全角标点宽度问题/全角标点与西文标点间距问题,可能得用到3.5.2
中的命令了。
xeCJK
对不同的字符设置了不同的字符类:
可见全角右标点是 3
类,半角右标点是 5
类,可以使用 \XeTeXinterchartoks
设置这两类标点之间的空白即可。
代码和效果如下:
\documentclass{ctexart}
\XeTeXinterchartoks 3 5 = {\kern-0.5em}
% \ExplSyntaxOn
% \XeTeXinterchartoks
% \c__xeCJK_FullRight_class_int \c__xeCJK_HalfRight_class_int {\kern-0.5em}
% \ExplSyntaxOff
\begin{document}
查看《手册》, 可以知道\par
查看《手册》可以知道
\end{document}
以下代码完美解决:
\documentclass{ctexart}
\ExplSyntaxOn
\xeCJK_pre_inter_class_toks:nnn {FullRight} {HalfRight} {\kern-0.5em}
\ExplSyntaxOff
\begin{document}
查看《手册》, 可以知道\par
查看《手册》可以知道
\end{document}
这个问题里面,设置了若干标点特性。请注意“设为无效”的优先级顺序。
https://www.latexstudio.net/index/details/index/mid/4462.html
但是仍有两行(标红色)搞不定
请问大佬能否帮忙看看这个问题?标红色的两行试了好久都没搞定
https://www.latexstudio.net/index/details/index/mid/4462.html
@u115385 建议您新开一个问题贴 ^_^
@u64726
@u64726 我想到一种办法,将英文逗号
,
的类别设置为3
,然后就能像对待中文逗号那样对待英文逗号了。不过我不清楚这会带来什么额外影响。@u686
啊...对于
《
,》
来说依旧压缩吧(如下图,换成了全角逗号、不接符号)(觉得不够“压”可以把宽度值调小),对于全角逗号来说因为没有调整宽度肯定还是占据一个汉字空白。只压缩右不压缩左是有些不协调的,而若是想压缩所有全角符号,
3.5.2
中\xeCJKEditPunctStyle
的fixed-punct-*
/mixed-punct-*
/mixed-margin-*
应该OK@u64726 您有点误解我的意思,我重新理一遍吧。
数学公式中不能直接排版中文标点,而且中文标点与数学公式字符也不搭,所以公式中必须使用英文标点。而为了统一标点符号,正文的标点就必须使用西文标点了。
我想要采用全角标点风格(其实全角半角无所谓,只要间距跟全角一样就行),所以自然不能用
\xeCJKsetwidth
调整某些标点的宽度了。而xeCJK
的标点挤压规则是对于中文标点而言的,中文西文标点放一起就没有标点挤压了。现在再看
》,
情形,如何处理它们之间的标点挤压呢?以及类似的》.
),
).
等等?@u686 这里的“调整标点宽度”,肉眼看起来的效果就是在减小与相邻符号的空白间距呢...这算不算您说的“标点挤压”呢,我的知识有点跟不上了...
如果很幸运的是的话,鉴于您提到:
所以基本不用理会中文句逗号等句末符号本身的间距问题,直接对所有中文符号进行宽度设置即可:
而如果您只想对右侧符号“挤压”,请用
\xeCJKsetwidth
列举(因为您说正文中都在用西文标点,那么中文标点中独有的基本只剩那几种括号了);或如果依旧不符合您的需求的话,摊手。@u64726 我的意思是,如果

\xeCJKsetwidth{》}{0.5em}
,当》
跟英文逗号时有正确的效果:但是当

》
跟汉字时就出问题了:如何做到


》
跟英文逗号时能实现标点挤压,跟汉字时又能有全角宽度?如下:@u686 好吧...爱莫能助了。
xecjk.sty
中可能有对应的宏或函数,但我不会l3。可以在ctex的issues翻一下。