Unicode 包含十二个用于表示 CJK 字符音调的特殊符号。其中四个是中国传统符号:U+302A:〪
“表意平声调符号”至 U+302D。另外八个是由西方传教士在十九世纪中叶引入的,并被本土汉语语言学所采用:U+A700:꜀
“修饰字母汉语音调阴平”至 U+A707。
我想知道是否有一种标准方法可以使用它们在 xeCJK 中覆盖 CJK 字符。(另一个复杂之处在于我正在排版垂直文本,为此使用内置的 xeCJK 选项。)
在以下最小工作示例中,我尝试用“平”和“去”音调标记标记两次出现的“遺”。标记出现了,但没有出现在应有的位置。
此软件包中的竖排中文文本主要由 Simsun 字体支持,该字体不包含各种音调符号字符。因此,我创建了新的 CJK 字体系列,以便加载包含相关字符的字体。但这些字体不支持 选项RawFeature={vertical}
,xeCJK
这可能是问题的一部分。
我曾希望也许xeCJK
可以有一个内置工具来用这些传统标记来标记字符。
%!TEX TS-program = xelatex
\documentclass{bxjsarticle}
\usepackage{xeCJK}
\setCJKmainfont[Scale=MatchLowercase,Mapping=tex-text,RawFeature={vertical}]{SimSun}
% To get traditional tone marks for ``ideographic tone mark'' (ITM) characters
\newCJKfontfamily\ITMtones{BabelStone Han}
\newCJKfontfamily\ITMtonesA{HAN NOM A}
\newCJKfontfamily\ITMtonesB{Hanazono Mincho A Regular}
\begin{document}
\fontsize{40}{40}\selectfont
BabelStone Han:\vskip1em
誠宜開張聖聽、以光先帝{\ITMtones{〪}}遺德、恢弘志士之氣、不宜妄自菲薄、\dots 是以先帝簡拔以遺{\ITMtones{ 〬}}陛下、愚以為、宮中之事、事無大小、悉以咨之\dots
\clearpage
HAN NOM A:\vskip1em
誠宜開張聖聽、以光先帝{\ITMtonesA{〪}}遺德、恢弘志士之氣、不宜妄自菲薄、\dots 是以先帝簡拔以遺{\ITMtonesA{ 〬}}陛下、愚以為、宮中之事、事無大小、悉以咨之\dots
\clearpage
Hanazono Mincho A Regular:\vskip1em
誠宜開張聖聽、以光先帝{\ITMtonesB{〪}}遺德、恢弘志士之氣、不宜妄自菲薄、\dots 是以先帝簡拔以遺{\ITMtonesB{ 〬}}陛下、愚以為、宮中之事、事無大小、悉以咨之\dots
\end{document}
答案1
不是很好,但这是一个快速而粗糙的解决方案,使用\kern
和\raisebox
,两者都手动调整。为了避免字体问题,我使用罗马字母o
作为传统的音调标记圈,而不是规定的 Unicode 字符。
这样做会导致行距和字距不合适,我也手动调整了它们。结果仍然不完美 — 除其他外,第一行比段落的其余部分短一个字符。如果能听到更好的解决方案,我将不胜感激。
[除了遺之外,我在这里标记了菲和不,因为它们各自都有替代的平盛文献中的读物。在这里我们希望他们的上升和入生读数。
%!TEX TS-program = xelatex
\documentclass{bxjsarticle}
\usepackage{xeCJK}
\setCJKmainfont[Scale=MatchLowercase,Mapping=tex-text,RawFeature={vertical}]{SimSun}
\usepackage{setspace} % Provides \setstretch
% To get overstruck ``o'' to represent traditional corner tone marks
% píngshēng 平聲: overstruck circle at lower left corner of character
\newcommand\pyng[1]{#1\kern-14pt{%
\fontsize{25}{25}\selectfont\textbf{\raisebox{-1.6ex}o}}%
\kern2pt}
% shǎngshēng 上聲: overstruck circle at upper left corner of character
\newcommand\shaang[1]{#1\kern-40pt{%
\fontsize{25}{25}\selectfont\textbf{\raisebox{-1.6ex}o}}%
\kern27pt}
% qùshēng 去聲: overstruck circle at upper right corner of character
\newcommand\chiuh[1]{#1\kern-40pt{%
\fontsize{25}{25}\selectfont\textbf{\raisebox{0.6ex}o}}%
\kern27pt}
% rùshēng 入聲: overstruck circle at lower right corner of character
\newcommand\ruh[1]{#1\kern-14pt{%
\fontsize{25}{25}\selectfont\textbf{\raisebox{0.6ex}o}}{}%
\kern2pt}
\begin{document}
\raggedright % Reduce kerning distortion (default justified alignment is worse).
\setstretch{1.25} % Reduce leading distortion.
\fontsize{40}{40}\selectfont
Using \texttt{\textbackslash kern} and \texttt{\textbackslash raisebox}, hand-tuned:
誠宜開張聖聽、以光先帝\pyng{遺}德、恢弘志士之氣、\ruh{不}宜妄自\shaang{菲}薄、…是以先帝簡拔以\chiuh{遺}陛下、愚以為、宮中之事、事無大小、悉以咨之…
\end{document}
通过我使用的其他附加功能来获得完整的旋转文本和调整的标点符号,结果是可以接受的:
我会把完整的代码放上来,供感兴趣的人参考——我仍然很高兴看到更优雅的解决方案。
%!TEX TS-program = xelatex
\documentclass{bxjsarticle}
\usepackage{xeCJK}
\setCJKmainfont[Scale=MatchLowercase,Mapping=tex-text,RawFeature={vertical}]{SimSun}
\setCJKfallbackfamilyfont{rm}[Script=CJK,RawFeature={vertical}]{SimSun-ExtB}
% To get IPA font, set as nominally \texttt
\setmonofont[Scale=1,Mapping=tex-text]{Doulos SIL}
% The following adjustments improve kerning.
\usepackage{newunicodechar}
\newunicodechar{。}{\hspace{0pt}。\hspace{0pt}}
\newunicodechar{,}{\hspace{0pt},\hspace{0pt}}
\newunicodechar{﹐}{\hspace{0pt}﹐\hspace{0pt}}
\newunicodechar{︐}{\hspace{0pt}︐\hspace{0pt}}
\newunicodechar{;}{\hspace{0pt};\hspace{0pt}}
\newunicodechar{:}{\hspace{0pt}:\hspace{0pt}}
\newunicodechar{、}{\hspace{0pt}、\hspace{0pt}}
\newunicodechar{!}{\hspace{0pt}!\hspace{0pt}}
\newunicodechar{?}{\hspace{0pt}?\hspace{0pt}}
\newunicodechar{(}{\hspace{0pt}(\hspace{0pt}}
\newunicodechar{)}{\hspace{0pt})\hspace{0pt}}
\newunicodechar{《}{\hspace{0pt}《\hspace{0pt}}
\newunicodechar{》}{\hspace{0pt}》\hspace{0pt}}
\newunicodechar{「}{\hspace{0pt}「\hspace{0pt}}
\newunicodechar{」}{\hspace{0pt}」\hspace{0pt}}
\usepackage{xeCJKfntef} % enable \CJKunderline etc.
\usepackage{setspace} % enable \setstretch
% Settings for a 90-degree rotated "flowframe" to enable vertical typesetting
% (Following https://tex.stackexchange.com/a/402025/3935)
\usepackage{flowfram}
\newflowframe{\textheight}{\textwidth+2em}{0pt}{\textheight}[mainframe]
\setflowframe{1}{angle=-90}
% Command to properly align roman characters with Chinese characters:
% (Following https://tex.stackexchange.com/a/402025/3935)
\let\CJKsymbolOrig\CJKsymbol
\let\CJKpunctsymbolOrig\CJKpunctsymbol
\newcommand*\CJKmovesymbol[1]{\raise.35em\hbox{\CJKsymbolOrig{#1}}}
\newcommand*\CJKmovepunctsymbol[1]{\raise.35em\hbox{\CJKpunctsymbolOrig{#1}}}
\newcommand*\CJKmove{\punctstyle{plain}
\let\CJKsymbol\CJKmovesymbol
\let\CJKpunctsymbol\CJKmovepunctsymbol
}
% To get overstruck ``o'' to represent the four traditional corner tone marks
% píngshēng 平聲: overstruck circle at lower left corner of character
\newcommand\pyng[1]{#1\kern-14pt{%
\fontsize{25}{25}\selectfont\textbf{\raisebox{-.4ex}o}}}%
%\kern2pt}
% shǎngshēng 上聲: overstruck circle at upper left corner of character
\newcommand\shaang[1]{#1\kern-40pt{%
\fontsize{25}{25}\selectfont\textbf{\raisebox{-.4ex}o}}%
\kern27pt}
% qùshēng 去聲: overstruck circle at upper right corner of character
\newcommand\chiuh[1]{#1\kern-40pt{%
\fontsize{25}{25}\selectfont\textbf{\raisebox{1.9ex}o}}%
\kern27pt}
% rùshēng 入聲: overstruck circle at lower right corner of character
\newcommand\ruh[1]{#1\kern-14pt{%
\fontsize{25}{25}\selectfont\textbf{\raisebox{1.9ex}o}}}%
%\kern2pt}
\begin{document}
\CJKmove % Adjusts positioning of Roman font vis-à-vis CJK, and also CJK punctuation
\raggedright % Makes parskip unnecessary here, more neatly.
\setstretch{1.25} % Reduce leading distortion.
\vspace*{\fill}
\pagenumbering{gobble} % No page-numbering starting here
\fontsize{40}{40}\selectfont
誠宜開張聖聽、以光先帝\pyng{遺}德、恢弘志士之氣、\ruh{不}宜妄自\shaang{菲}薄、…是以先帝簡拔以\chiuh{遺}陛下、愚以為、宮中之事、事無大小、悉以咨之…
\vspace*{\fill}
\end{document}