ctex-kit icon indicating copy to clipboard operation
ctex-kit copied to clipboard

phonetic symbols in vertical Chinese writing

Open qnach opened this issue 8 years ago • 10 comments

I do not know how do others type phonetic symbols in vertical Chinese writing. The symbol do not come out. Here is an example:

\documentclass[12pt,twoside,fleqn,openleft]{book}

\usepackage{fontspec} \usepackage[BoldFont,SlantFont,CheckSingle,AutoFallBack=true]{xeCJK} \usepackage{CJKnumb} \newfontlanguage{Chinese}{CHN}

\setmainfont{Alegreya} \setCJKmainfont[Script=CJK,Language=Chinese,Vertical=RotatedGlyphs,RawFeature=vertical, BoldFont=ipamjm.ttf,ItalicFont=EDUSTD-15.TTF, BoldItalicFont=DFT_Z3.TTC,SmallCapsFont=DFT_L5.TTC]{MINGLIU.TTC}

\setCJKfallbackfamilyfont{rm}[Script=CJK,Language=Chinese,Vertical=RotatedGlyphs,RawFeature=vertical, BoldFont=DFT_TX3.TTC,ItalicFont=EDUSTD-15.TTF, BoldItalicFont=MINGLIU.TTC]{HANAMINA.TTF}

\newcommand*\CJKmovesymbol[1]{\raise .35em\hbox{#1}} \newcommand*\CJKmove{\punctstyle{kaiming}% do not modify the spacing between punctuations \let\CJKsymbol\CJKmovesymbol \let\CJKpunctsymbol\CJKsymbol}

\usepackage{everypage} \AddEverypageHook{\CJKmove\special{pdf: put @thispage <</Rotate 90>>}}

\begin{document}

黜陟,音 ㄔㄨ ˋ ㄓ ˋ。

\end{document}

qnach avatar Aug 03 '17 02:08 qnach

我還是直接寫中文了。 您的問題應該是指「注音符號沒問題,但聲調符號無法顯示」吧?這跟昨天的問題有些類似。原因很簡單,注音符號的聲調符號,在xeCJK這裡,預設為西文字符,使用西文字型輸出;但您使用的西文字型Alegreya中,並未包含這些聲調符號(實際上是不全,但恰好沒有這裡用到的去聲符號),自然無法顯示。解決辦法是利用xeCJK的功能,將這些聲調符號聲明為CJK字符(若換用其他收錄這些聲調符號的西文字型、而非改變其字符類別,雖可顯示,但因直排時西文旋轉九十度,所以這些聲調符號也會和西文一個方向,與注音符號方向不同,效果錯誤):

\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類未必合適,僅作示例。注意把正文中聲調符號前邊的空格去掉。)

不過,注音符號的聲調符號應位於最後一個注音符號的右上方(輕聲除外;直排橫排均如此),目前似乎尚未有處理注音符號的宏包,所以聲調符號現在(直排時)都是在注音符號正下方:

0000

另外,直排時,漢字與西文基線不同,如果使用了西文(包括阿拉伯數字,這幾乎是不可避免的),那麼還需要調整基線。XeTeX對直排支援並不好,中文直排LaTeX最好還是使用日本的upLaTeX或者中國基於此的衍生版ApLaTeX。

最後,您這代碼,雖然能編譯過去,但是寫得不妥的地方太多了。

Man-Ting-Fang avatar Aug 03 '17 05:08 Man-Ting-Fang

這個方法出來的缺點是那個第幾聲在下面。有沒有辦法弄到右邊...

在歸化中國與歸化日本中間我想還是選擇歸化日本好了 :paintbrush: MikTeX 也沒有ApLaTex

請問我如何能知道一個字型有沒有提供 GSUB 功能?

失敬了,原來滿庭芳還是高手。請多多指教。請問我的代碼還該如何修改?

qnach avatar Aug 03 '17 06:08 qnach

checkout this project: https://gitee.com/songjinghe/hall-of-light/ which currently use xelatex and provide both vertical & horizontal version of the content. un-common charactors are displayed by different fonts which contains that charactor. Also as @Man-Ting-Fang said, I have to adjust the baseline when combining different fonts goodluck~

songjinghe avatar Jan 20 '18 03:01 songjinghe

Thank you for this update. I have registered, however, I do not know what that is? Is it only for a particular book or a development of a general method? Furthermore, I do not know how to download anything from there.

qnach avatar Jan 20 '18 03:01 qnach

以下内容截自https://gitee.com/songjinghe/hall-of-light/blob/master/main.tex 该文件展示了

  • 使用xelatex进行中文的直排
  • 使用多种字体显示非常见字符

希望可以帮到你~

%!TEX encoding = utf8
%!TEX program = xelatex

\documentclass[UTF8, nofont, landscape]{ctexbook}

%% Vertical settings------------------

%% Rotate PDF pages
\usepackage{atbegshi}
\AtBeginShipout{%
  \global\setbox\AtBeginShipoutBox\vbox{%
    \special{pdf: put @thispage <</Rotate 90>>}%
    \box\AtBeginShipoutBox
  }%
}%

%% Font Vertical Mode
\defaultCJKfontfeatures{RawFeature={vertical:+vert}}

%% Common Font Settings
\setCJKmainfont[BoldFont=Adobe Heiti Std,ItalicFont=Adobe Kaiti Std]{Adobe Song Std}
\setCJKsansfont{Adobe Heiti Std}
\setCJKmonofont{Adobe Fangsong Std}

%% Adjust baseline if needed (when you use some other fonts \ytzfz, see below)
\makeatletter
\newcommand*{\shifttext}[2]{%
  \settowidth{\@tempdima}{#2}%
  \makebox[\@tempdima]{\hspace*{#1}#2}%
}%
\makeatother
\newcommand\ytza[1]{\shifttext{-3.5pt}{\ytzfz #1}}

%% 以下字体用于补充顯示Adobe缺失的漢字(虽然它们每个包含的汉字数比Adobe可能还小些)。
\newCJKfontfamily{\fzsongbig}{[宋体-方正超大字符集.TTF]}
\newCJKfontfamily{\arpluming}{AR PL UMing CN}
\newCJKfontfamily{\simsun}{SimSun}
\DeclareTextFontCommand{\ytzfz}{\fzsongbig}
\DeclareTextFontCommand{\yt}{\arpluming}
\DeclareTextFontCommand{\ytz}{\simsun}


\begin{document}
chinese content here. 各种非常见字及异体字(ytz)用上面命令处理,如:
\yt{𩅞}(雩重):zhong1,氣之往來不息
\ytz{㰦}(去欠):qu4,呿,张口
\ytza{𩩲}(骨曷):he2,肩骨
\end{document}

songjinghe avatar Jan 20 '18 10:01 songjinghe

我還是看不懂你在寫甚麼? 目的是甚麼? 是一個能在 MikTeX 上執行垂直編排的程序? (先前滿庭芳建議歸化日本...) 然後你的程序我看不懂 (有些部分可能是每個人用的方式不同) 我分不清那些是必要的那些不是必要的 哪些是你的創見... 例如 \usepackage{atbegshi} 我就沒用過,也沒聽過。網路上查一下,好像是某個 package 的新版? 但是目的是做甚麼? 我是不是必須用他? 用了有甚麼好處? 這一段好像是要旋轉頁面? 我不是這樣寫的。我是這樣寫的 (雖然也是抄來的) \usepackage{everypage} \AddEverypageHook{\CJKmove\special{pdf: put @thispage <</Rotate 90>>}} 你那段有比較好嗎?

另外你有一段旋轉 baseline 我也不知道是不是必須等等

上次滿庭芳建議規劃日本的方案我始終沒有進行。因為我主要是用 MikTeX 寫論文。TeXLive 系統檔案名稱與 MikTeX 的檔案名稱相衝突,沒辦法兩個都灌。

另外,那個黃帝內經計畫到底是甚麼? 是已經有排出來的黃帝內經? (我真的很想要) 不過找不到。 排黃帝內經的確是一個很有挑戰的計畫。除來直排以外會有很多怪字。

qnach avatar Jan 28 '18 01:01 qnach

@qnach 抱歉表達的不是很清楚。

我試圖寫一個用xelatex做中文直排的例子給你借鑒(MikTeX裏好像也有xelatex所以你也可以試試)。 聲明一下,例子裏的代碼全部是從網路上copy過來的(我沒有任何創見)。而我確實沒用過MikTeX,所以有些宏包用的也不太一樣。至于哪個寫法好我也不是很清楚,我的要求很低,只要能用就行。

調整baseline那個主要看你用什麽字體,有些字體不用調整,有些需要調整,排版出來你看一下字的位置就知道了。

PS:黃帝內經裏主要是有些非常見字。但是按部首查字典就可以搞定~我用的是漢典(你如果訪問不了可以用全字庫) 這個項目的主要工作量是在校對上,我根據的底稿是大陸這邊1978年出版的黃帝內經,裏面據說加入了後來馬王堆出土的一些片段。目前只校對到前10章,有一個小樣你可以在附件裏下載

songjinghe avatar Jan 28 '18 02:01 songjinghe

PPS #266 也是不錯的參考(如果妳後面考慮用uplatex的話) PPPS 貌似MikTeX可以和TexLive裝在壹個系統裏啊?(我在win10下裝了TexLive和基於MikTeX的CTeX,只需要調整下PATH的問題就好了~ 這個不太確定,妳自己再看看哈……可能CTeX和MikTeX不太壹樣的說~)

songjinghe avatar Jan 28 '18 02:01 songjinghe

另外,直排時,漢字與西文基線不同,如果使用了西文(包括阿拉伯數字,這幾乎是不可避免的),那麼還需要調整基線。XeTeX對直排支援並不好,中文直排LaTeX最好還是使用日本的upLaTeX或者中國基於此的衍生版ApLaTeX。

能不能上報給 XeTeX 的開發者?

KrasnayaPloshchad avatar May 19 '18 15:05 KrasnayaPloshchad

另外,直排時,漢字與西文基線不同,如果使用了西文(包括阿拉伯數字,這幾乎是不可避免的),那麼還需要調整基線。XeTeX對直排支援並不好,中文直排LaTeX最好還是使用日本的upLaTeX或者中國基於此的衍生版ApLaTeX。

XeTeX 依賴 HarfBuzz 實作文字排版,所以這個問題還需要向 HarfBuzz 開發者反饋:https://github.com/harfbuzz/harfbuzz/issues

KrasnayaPloshchad avatar May 22 '18 13:05 KrasnayaPloshchad