Yue ZHANG
Yue ZHANG
非常感谢您详细的解释!不急不急,健康第一~~
赞~~ 下周更新应该会有新语法的完整说明吧? 还有一个问题,我自己写了一些jfm和jvf,用dvipdfmx方式时效果是正确的,但是用目前的“ot:”语法,标点位置就不对了。例如,我写了一些适用于港台式居中标点的jfm,使用标点居中的字体(例如Adobe明体)时,“ot:”语法得到的效果是标点竖直方向居中,但水平方向却是靠在一边的,dvipdfmx没这个问题。 不知这个问题在下周的新版本中是否会解决? 谢谢!
> I find title marks isn't correct when it's in the beginning of paragraph, and in some fonts, fullstop's position is shift up. 如果你用[jsclasses](https://ctan.org/pkg/jsclasses)的话,可以解决第一个问题(注意,对于upLaTeX和ApLaTeX,要使用`uplatex`选项)。如果不想用jsclasses的话,可以用[bxjaprnind](https://ctan.org/pkg/bxjaprnind)宏包解决第一个问题。 其实,这个不是ApTeX引擎的原因,所有的pTeX系列引擎都这样。除此之外,JFM至少还有一个bug,我正在写一个宏包,用来(部分地)解决这两个问题,应该会很快写完(吧)……(这两个bug似乎不太可能在JFM自身上解决,需要通过宏才行。) 第二个问题,请给出详细一点的信息。不过这个可能是字体的问题。JVF可以在竖直方向上平移,但都是整体平移,用来调整整个字体的基线;ApTeX如果用自己的`ot:`式的语法的话,目前似乎无法在竖直方向上移动。
> 如果你用jsclasses的话,可以解决第一个问题(注意,对于upLaTeX和ApLaTeX,要使用uplatex选项)。如果不想用jsclasses的话,可以用bxjaprnind宏包解决第一个问题。 不过,无论是哪种方法,都无法确保在所有情形下都能解决,有时需要额外的设置,甚至自己手动处理。遇到无法自动处理的情形,可以在书名号(以及所有开符号类,如各种引号、括号等的前一半)前加上`\inhibitglue`(原语)或者是(u)pLaTeX提供的`\inhibitglue`的简短别名`\
> To summarize the limitation of ApTeX, we cannot utilize VF for shifting characters vertically or horizontally with on ApTeX's ot: grammer, right? I cannot find information about JVF in...
我還是直接寫中文了。 您的問題應該是指「注音符號沒問題,但聲調符號無法顯示」吧?這跟昨天的問題有些類似。原因很簡單,注音符號的聲調符號,在xeCJK這裡,預設為西文字符,使用西文字型輸出;但您使用的西文字型Alegreya中,並未包含這些聲調符號(實際上是不全,但恰好沒有這裡用到的去聲符號),自然無法顯示。解決辦法是利用xeCJK的功能,將這些聲調符號聲明為CJK字符(若換用其他收錄這些聲調符號的西文字型、而非改變其字符類別,雖可顯示,但因直排時西文旋轉九十度,所以這些聲調符號也會和西文一個方向,與注音符號方向不同,效果錯誤): ```TeX \ExplSyntaxOn \xeCJKsetcharclass{"02C7}{"02C7}{\xeCJK_class_num:n{FullRight}} \xeCJKsetcharclass{"02C9}{"02C9}{\xeCJK_class_num:n{FullRight}} \xeCJKsetcharclass{"02CA}{"02CB}{\xeCJK_class_num:n{FullRight}} \xeCJKsetcharclass{"02D9}{"02D9}{\xeCJK_class_num:n{FullRight}} \ExplSyntaxOff ``` (註:FullRight類未必合適,僅作示例。注意把正文中聲調符號前邊的空格去掉。) 不過,注音符號的聲調符號應位於最後一個注音符號的右上方(輕聲除外;直排橫排均如此),目前似乎尚未有處理注音符號的宏包,所以聲調符號現在(直排時)都是在注音符號正下方:  另外,直排時,漢字與西文基線不同,如果使用了西文(包括阿拉伯數字,這幾乎是不可避免的),那麼還需要調整基線。XeTeX對直排支援並不好,中文直排LaTeX最好還是使用日本的upLaTeX或者中國基於此的衍生版ApLaTeX。 最後,您這代碼,雖然能編譯過去,但是寫得不妥的地方太多了。
现在有些中日韩字体的西文部分也很好是不假,但我简单想了一下,至少有两个问题: 一、斜体。这个对西文而言不可或缺,但中日韩字体至今恐怕少有单独的斜体(思源我记得是没有,注意思源中日韩的西文部分跟单独西文版本的 Source 字体是不一样的。以后会有吗?最近没怎么关注思源),当然有些字体会通过 OpenType 的 `ital` 特性将斜体跟正体都集成在一个字体文件里(这个思源已经明确是不可能了,因为内部空间早就不够用了),或者用 TTC/OTC 的形式集合在一起。对这几种可能都检测判断一下应该也没什么问题,但是……而且如果没有(意大利式)斜体(这恐怕仍然是多数情况),大概只能代以机械变形的伪斜体。(如果是高质量的西文字体,即使斜体采用(或增加)Oblique/Slanted 的方案,设计时也是调整过的,不是直接机械变形就可以的。) 二、如果对字体没什么细致要求倒也罢了(虽然这可能是多数情况),但若有的话,有很多细节确实是要分别对中日韩和西文部分分别设置的,合成一个命令无非是让用户可以换一种写法,但开发起来大概会比较麻烦,而且以后出问题的可能性也比较大。其实我想,专业或高质量的排版中,分别设置中西文字体(甚至中、日、韩三家(或再加上越,四家)之间也要分别设置),并不仅仅只是字体设计得好不好看的事情,而是这些文字/语言之间本来就有很多不同要求,本身就要分别处理的。 所以,我个人的想法就是,如果增加这种功能,不但实现、维护起来麻烦,而且更重要的是,很容易有意无意地「诱使」多数对字体不怎么了解的用户做出糟糕的效果来(除了上边写的,想想看:「某易宋体也有英文的吼,介还似伦家学校要求滴捏,揍用它啦~~」如果要在用户手册里建议 不 要用某些字体的话,那这个清单肯定拉得很长的,而且标准是什么?审美这个事情很难说的)。为有限的简便,而有这些副作用,洵宜审慎。(抱歉话说得可能很直……)
> 我的理解是,ctex 在功能之上,跟多的是为不同的底层引擎提供统一的上层接口。因此在不同引擎之间,保持兼容性是 ctex 的主要任务之一。考虑到 LuaTeX-ja 的这些功能,目前在其他引擎上不好实现,所以不便引入 ctex。 其实,我不是想说主动新增什么新功能,只是希望能够 **不要彻底禁用**,如果用户有需要的话,可以 **选择载入** 相应功能(亦即,可以选择禁用与否),同时为兼容性考虑,可以设置为 **默认不载入**。当然,这只是我的简单想法,可能还是 naive 了。 不过,请容许我牢骚一下,`xeCJK` 也有很多在其他引擎上不易实现、或至少是尚未实现的功能,可是用户看了 `xeCJK` 的说明文档后,使用 XeLaTeX 编译时仍然可以放心大胆地使用这些功能,因为它们并未被禁用;然而,用户看了 `luatexja` 的说明文档后,使用 LuaLaTeX 编译时却发现有些功能无法使用(哪怕并无冲突),这令人十分困扰(虽说 `ctex` 说明文档对此有所提及,但并未(也不大可能)详细列举)。 另外,目前 `ctex` 也有为特定引擎做处理的(用户层面的)功能,例如...
`\ybaselineshift`等命令貌似都是当场生效,需要跟着字号一起变,不然字号一变就又不对了;而且,`baselineshift`貌似针对的是西文,不针对汉字,然而西文基线都是统一的,不统一的是汉字字体,这样一来,如果混用基线不同的汉字字体,汉字字体之间的基线还是无法统一。 JVF倒是可以用`-b`选项调整汉字字体的基线,但为各种不同基线的汉字字体事先生成合适的JVF,也不现实,而且也太占空间。 所以最理想的还是汉字字体的基线能够统一,这样就不必费力在TeX上修正了。 当然,这并不算是很严重的问题,大概只有深度强迫症读者才会注意到吧……
今天把所有Fandol字体都看了一下,发现除了FandolSong-Regular外,剩下五个字体的全角问号“?”都是居中的。Fandol字体应该主要是面向简体中文吧,似乎还是像FandolSong-Regular一样居左为好。另外,六个字体的全角分号“;”和全角冒号“:”位置感觉都高了些。