Open Li-ricecake opened 8 months ago
听起来很奇怪,因为这种基本的禁则,早在 CTeX 1.x 时代就确认已经加上了。
如果您确认为是 CTeX 宏包导致,建议提供一个可以体现该问题的可编译的完整代码作为样例。
好的,这是可以复现此问题的完整可编译代码
\documentclass[fontset=windows,twoside]{ctexrep}
\begin{document}
唐代之前,荆楚民间存在一种祈求丰收的“牵钩之戏”,广为流传。《观拔河俗戏》诗有云:“壮徒恒贾勇,拔拒抵长河。欲练英雄志,须明胜负多……预期年岁稔,先此乐时和。”
\end{document}
好的,这是可以复现此问题的完整可编译代码
@Li-ricecake 最好给出编译方式和截图,方便说明。
使用 xelatex (xeCJK 2022/08/05 v3.9.1):
使用 lualatex (luatexja 2023-10-10):
texdoc xecjk
(v3.9.1, 2022-08-05), sec. 3.1 宏包选项, p. 5
对应 xeCJK.dtx
@8897869f 的 8309--8310 行, ^^^^2026
-> U+2026
-> …
\keys_set:nn { xeCJK / options }
{
% ...
LongPunct = { ^^^^2014 ^^^^2e3a ^^^^2025 ^^^^2026 } ,
MiddlePunct = { ^^^^2013 ^^^^2014 ^^^^2e3a ^^^^2027 ^^^^00b7 ^^^^30fb ^^^^ff65 } ,
% ...
}
% !TeX program = xelatex
\documentclass[fontset=fandol, twoside]{ctexrep}
\def\demo{唐代之前,荆楚民间存在一种祈求丰收的“牵钩之戏”,广为流传。
《观拔河俗戏》诗有云:“壮徒恒贾勇,拔拒抵长河。
欲练英雄志,须明胜负多……预期年岁稔,先此乐时和。”}
\begin{document}
\demo
\xeCJKsetup{LongPunct-={…}, MiddlePunct+={…}}
\demo
\end{document}
要不要考虑将这设为默认?破折号和省略号属于《中文排版需求》行首行尾禁则 的“严格处理”级别。
这个“严格处理”应该是指最严格的规则,而不是需要最严格地执行?我的理解是 GB-style 默认比较好?
好的,这是可以复现此问题的完整可编译代码
@Li-ricecake 最好给出编译方式和截图,方便说明。 感谢提醒!我之后会注意的!
texdoc xecjk
(v3.9.1, 2022-08-05), sec. 3.1 宏包选项, p. 5
对应
xeCJK.dtx
@8897869f 的 8309--8310 行,^^^^2026
->U+2026
->…
\keys_set:nn { xeCJK / options } { % ... LongPunct = { ^^^^2014 ^^^^2e3a ^^^^2025 ^^^^2026 } , MiddlePunct = { ^^^^2013 ^^^^2014 ^^^^2e3a ^^^^2027 ^^^^00b7 ^^^^30fb ^^^^ff65 } , % ... }
% !TeX program = xelatex \documentclass[fontset=fandol, twoside]{ctexrep} \def\demo{唐代之前,荆楚民间存在一种祈求丰收的“牵钩之戏”,广为流传。 《观拔河俗戏》诗有云:“壮徒恒贾勇,拔拒抵长河。 欲练英雄志,须明胜负多……预期年岁稔,先此乐时和。”} \begin{document} \demo \xeCJKsetup{LongPunct-={…}, MiddlePunct+={…}} \demo \end{document}
非常感谢您!提问之前我翻ctex的文档没找着相关内容,原来在xeCJK的文档里。。。
要不要考虑将这设为默认?破折号和省略号属于《中文排版需求》行首行尾禁则 的“严格处理”级别。
这个“严格处理”应该是指最严格的规则,而不是需要最严格地执行?我的理解是 GB-style 默认比较好?
至少是出版社编辑会给我揪出来叫我全改掉的问题,估计算是严肃情况下不能出现吧
texdoc xecjk
(v3.9.1, 2022-08-05), sec. 3.1 宏包选项, p. 5
对应
xeCJK.dtx
@8897869f 的 8309--8310 行,^^^^2026
->U+2026
->…
\keys_set:nn { xeCJK / options } { % ... LongPunct = { ^^^^2014 ^^^^2e3a ^^^^2025 ^^^^2026 } , MiddlePunct = { ^^^^2013 ^^^^2014 ^^^^2e3a ^^^^2027 ^^^^00b7 ^^^^30fb ^^^^ff65 } , % ... }
% !TeX program = xelatex \documentclass[fontset=fandol, twoside]{ctexrep} \def\demo{唐代之前,荆楚民间存在一种祈求丰收的“牵钩之戏”,广为流传。 《观拔河俗戏》诗有云:“壮徒恒贾勇,拔拒抵长河。 欲练英雄志,须明胜负多……预期年岁稔,先此乐时和。”} \begin{document} \demo \xeCJKsetup{LongPunct-={…}, MiddlePunct+={…}} \demo \end{document}
这种做法有缺陷,省略号的两个“…”之间的间距可能会被拉大或挤小
用xeCJK提供的“设置相邻标点间距”可以解决
\xeCJKsetkern{…}{…}{0.2em}%将相邻两个…之间的间距设置为0.2em
@Li-ricecake 如无必要,建议不要全文引用某个长评论,只引用关键内容就行。让页面滚动条变短得慢一点……
非常感谢您!提问之前我翻ctex的文档没找着相关内容,原来在xeCJK的文档里。。。
用 xelatex 编译时,ctex 使用 xeCJK 中文方案。这也是为什么之前他们要问你提供更多信息、「给出编译方式」。
这种做法有缺陷,省略号的两个“…”之间的间距可能会被拉大或挤小 用xeCJK提供的“设置相邻标点间距”可以解决
\xeCJKsetkern{…}{…}{0.2em}%
将相邻两个…之间的间距设置为0.2em
假设继续参考《中文排版需求》,破折号 U+2014 "—" 似乎也需要相似的设置。
[!NOTE] 中文排版需求,sec A.2 非夹注型标号
- 破折号 占二个汉字大小,呈一直线、中间不断开。
- 省略号 占二个汉字大小,呈一点线、中间不断开,应将省略点置于字面中央。
0.2em 会不会太大?我不了解 xeCJK 的标点符号处理,不知道这里「应该设成多大」,也不知道 \xeCJKsetwidth
和 \xeCJKsetkern
的差异。
更新:等一下,xecjk/ctex 里的字宽(相邻两个汉字中心之间的距离)是可伸缩的。这就涉及中文排版需求里的「占二个汉字大小」怎么理解了
更新:等一下,xecjk/ctex 里的字宽(相邻两个汉字中心之间的距离)是可伸缩的。这就涉及中文排版需求里的「占二个汉字大小」怎么理解了
使用ctex宏包时发现中文省略号会出现在行首,这不符合中文标点禁则,顺带一提,ctex的控制单字成行并没有考虑到有的句子没有句末标点的问题