目的是列出日语词汇表,其中包含主要角色的汉字笔画顺序、其注音假名(位于主要角色上方的小假名字符)及其含义(英语)。
我KanjiStrokeOrders
的机器上安装了字体。我从以下网站下载此网站(点击)。
\documentclass[border=12pt,12pt,preview,varwidth]{standalone}
\usepackage{xcolor}
\usepackage{fontspec}
%\usepackage{xeCJK}
\usepackage{ruby}
\renewcommand\rubysep{.05ex}
\AtBeginDocument{\fontsize{20}{20}\selectfont}
\let\temp\ruby
\renewcommand\ruby[2]{\temp {\fontsize{60}{60}\fontspec{KanjiStrokeOrders}\selectfont#1}{#2}}
\def\mean#1{: \textcolor{red}{#1}}
\begin{document}
\begin{enumerate}
\item \ruby{会}{かい}\ruby{社}{しゃ} \mean{company}
\item \ruby{朝}{あさ} \mean{morning}
\end{enumerate}
\end{document}
没有xeCJK
xeCJK
虽然主角没有出现,但他们的注音假名却消失了。
和xeCJK
虽然xeCJK
出现了假名,但主角不再使用KanjiStrokeOrder
字体。
问题:
我应该如何选择字体来实现上述目标?
答案1
这是我第一次没有 的实验xeCJK
。
% run: xelatex mal-furigana.tex
\documentclass[border=12pt,12pt,preview,varwidth]{standalone}
\usepackage{xcolor}
\usepackage{fontspec}
\newfontfamily\kanji{KanjiStrokeOrders_v3.001.ttf}
\newfontfamily\furigana{FandolSong-Regular}
\usepackage{ruby}
\renewcommand\rubysep{.05ex}
\AtBeginDocument{\fontsize{20}{20}\selectfont}
\let\temp\ruby
\renewcommand\ruby[2]{\temp
{\fontsize{60}{60}\kanji#1}%
{\furigana#2}
}% end of \ruby...
\def\mean#1{: \textcolor{red}{#1}}
\begin{document}
\begin{enumerate}
\item \ruby{会}{かい}\ruby{社}{しゃ} \mean{company}
\item \ruby{朝}{あさ} \mean{morning}
\end{enumerate}
\end{document}
更新 1:xeCJK
这是使用新字体系列的实验。
% run: xelatex mal-furigana.tex
%\documentclass[border=12pt,12pt,preview,varwidth]{standalone}
\documentclass[a4paper]{article}
\pagestyle{empty}
\usepackage{xcolor}
\usepackage{fontspec}
\usepackage{xeCJK}
\usepackage{ruby}
\renewcommand\rubysep{.05ex}
\setCJKmainfont{KanjiStrokeOrders}
\newCJKfontfamily\furigana{FandolSong-Regular}
\AtBeginDocument{\fontsize{20}{20}\selectfont}
\let\temp\ruby
\renewcommand\ruby[2]{\temp
{\fontsize{60}{60}#1}%\selectfont\setmainfont{KanjiStrokeOrders}
{\fontsize{20}{20}\furigana#2}
}% end of \ruby...
\def\mean#1{: \textcolor{red}{#1}}
\begin{document}
\begin{enumerate}
\item \ruby{会}{かい}\ruby{社}{しゃ} \mean{company}
\item \ruby{朝}{あさ} \mean{morning}
\end{enumerate}
\end{document}
更新 2:这是承诺的版本,没有xeCJK
和ruby
。我正在通过tikz
包放置假名。我们可以运行xelatex
和lualatex
。可以为引擎设置 TTF/OTF 字体pdflatex
(但每个字体文件限制为 256 个字形),但它现在已经过时了。我附上了代码及其预览。
% run: xelatex or lualatex mal-furi-general.tex
\documentclass[a4paper]{article}
\pagestyle{empty}
\parindent=0pt
\usepackage{xcolor}
\usepackage{fontspec}
\usepackage{tikz}
\newfontfamily\kanji{KanjiStrokeOrders_v3.001.ttf}
\newfontfamily\furigana{FandolSong-Regular}
\def\mkanji{\fontsize{60}{60}\kanji}
\def\mfurigana{\fontsize{15}{15}\furigana}
\def\mruby#1#2{%
\begin{tikzpicture}[baseline=(temp.base)]
\node(temp){\mkanji#1};
\node[anchor=center,yshift=0.5ex]at(temp.north){\mfurigana#2};
\end{tikzpicture}%
}% End of \mruby...
\def\mean#1{ \textcolor{red}{#1}}
\newcount\malc \malc=0
\def\mterm{\par
\advance\malc by 1\relax%
\the\malc. %
}% End of \mterm...
\begin{document}
\fontsize{20}{20}\selectfont
\mterm \mruby{会}{かい}\mruby{社}{しゃ}\mean{company}
\mterm \mruby{朝}{あさ}\mean{morning}
\end{document}
答案2
如果您想知道如何为汉字选择字体,您应该知道您想为每个字符使用哪种字体,并且您需要知道xeCJK
使用它的基本功能。
字体
在您的示例中,您应该对汉字 (kanji) 使用特殊的字体 KanjiStrokeOrders,对振り仮名 (furigana) 使用另一种日文字体(您的文档中未正确指定)。
如果您没有设置适当的字体,您根本无法排版任何 CJK 字符,因为默认的拉丁现代字体不包含 CJK 字形。
相反,如果你使用 v3.2.10 或更高版本xeCJK
,中文字体 Fandol 加载时会出现警告:
*************************************************
* xeCJK warning: "fandol"
*
* Fandol is being set as the default font for CJK text.
* Please make sure it has been properly installed.
*************************************************
这就是为什么xeCJK
即使您没有指定日文字体,汉字注音也会出现在您的文档中。
使用xeCJK
v3.x的文档xeCJK
仅有中文,很抱歉。
主要目的xeCJK
是
- 自动为中日韩字符和拉丁字符选择不同的字体;
- 为了获得正确的换行;
- 进行标点符号字距调整。
基本功能是字体切换,语法与包相同fontspec
:
\setCJKmainfont
—\setmainfont
\setCJKsansfont
—\setsansfont
\setCJKmonofont
—\setmonofont
\newCJKfontfamily
—\newfontfamily
\CJKfontspec
—\fontspec
解决方案
% !TeX encoding = UTF-8
% !TeX program = XeLaTeX
\documentclass[border=12pt,12pt,preview,varwidth]{standalone}
\usepackage{xcolor}
\usepackage{xeCJK}
\setCJKmainfont{ipaexm.ttf} % For furigana and other Japanese characters
\newCJKfontfamily\strokefont{KanjiStrokeOrders_v3.001.ttf} % For stroke order
\usepackage{ruby}
\renewcommand\rubysep{.05ex}
\renewcommand\rubysize{0.2}
\let\oldruby\ruby
\renewcommand\ruby[2]{{\fontsize{60}{60}\selectfont\oldruby{\strokefont#1}{#2}}}
\def\mean#1{: \textcolor{red}{#1}}
\AtBeginDocument{\fontsize{20}{20}\selectfont}
\begin{document}
\begin{enumerate}
\item \ruby{会}{かい}\ruby{社}{しゃ} \mean{company}
\item \ruby{朝}{あさ} \mean{morning}
\end{enumerate}
\end{document}