TeX
中连用三个-
可以得到一个破折号,但是它的字符宽度只有(约?)一个汉字宽,很明显不符合中文语境的需求,但是如果只是使用scalebox
水平缩放为2倍的话,似乎垂直方向又不在一个汉字的垂直中心,不得不用raisebox
来调整位置,还有破折号的线宽,在这种条件下似乎无法轻易调整。有没有更方便或更完善的方法?
我似乎觉得这个问题还和字体有关:
这个链接里面的不同字体,破折号的长度并不总是2\ccwd
,也并不总不是2\ccwd
,此外如果直接用\rule
,似乎是可以同时控制高度,长度和粗细的...
也许可以在ctex-kit
的issues里面搜索,有不少有关的讨论。
\documentclass[fontset=ubuntu]{ctexart}
\begin{document}
我能吞下玻璃而不伤身体.
你好-远方不远.
你好--远方不远.
你好---远方不远.
你好——远方不远.
你好\rule[.6ex]{2\ccwd}{.5pt}远方不远.
我能吞下玻璃而不伤身体.
\end{document}
xeCJK
中也有一些黑魔法,与标点距离有关的还有这个回答:
\documentclass[fontset=ubuntu]{ctexart}
\xeCJKsetwidth{——}{1.2\ccwd}
\begin{document}
我能吞下玻璃而不伤身体.
你好——远方不远.
你好\rule[.6ex]{2\ccwd}{.5pt}远方不远.
我能吞下玻璃而不伤身体.
\end{document}
这几种我都用过。
我最近使用的是来自xeCJK的
\CJKsout{\hbox{\hphantom{空格}}}
,提问中给出的缩放位移法,以及\rule[]{}{}
法,这三个方法里:\rule[]{}{}
法的好处是绝对不会使破折号在换行时断开,即一半在上一行末,另一半在下一行行首。shfit+-
法,看起来似乎是将两个字符拼接在一起的(个人感觉有点类似于双剑号),所以中间看起来是连起来的而没有像word中那样在某些字体下会断开,不过其他字体的tex情形我没测试过。然而此方法有一个严重问题,就是ctex
宏集的标点禁则允许这种方式输入的破折号出现在行首(下图即是ctexart
文档类中使用两次shfit+-
法的结果),这太搞笑了!因为这是破折号的基本常识————不能出现在行首。xeCJK的黑魔法没用过,不知道ctex宏集能否正确处理它输入两次
shift+-
产生的破折号的位置...其实我还想到过一种方法,就是找一个两个字宽的破折号字符,将该字符输进TeX源文件,直接XeLaTeX编译就行,但是这个想法需要字体文件支持,目前也是没时间找