首先,在下面的输入文件中,我使用了汉字笔顺字体。因此,请从此处下载字体网站(点击)。
真正的目的是编写一个日语句子的枚举列表。标有 的汉字短语\phrase
将在两个不同的地方呈现。
\section{Sentences}
首先,它们将在环境\item
中渲染enumerate
。只有中文字符及其假名会使用普通字体渲染。在输入文件中,我只需要准备此部分。\section{Vocabularies}
其次,它们将在环境tcbitem
中自动呈现tcbitemize
。汉字的笔顺(使用 Kanji Stroke Order 字体)、假名注音和含义都在这里呈现。在输入文件中,我不需要准备此部分。这意味着在中定义的短语\section{Sentences}
会在这里自动重用。
这样,我的文档的读者如果想知道如何手写相关的汉字以及它们的含义,就可以参考汉字短语。
让我将开发分为几个阶段,因为在每个阶段我都可能会遇到问题。
阶段1
在此阶段,我想确保我可以使用 编译文档而不会出错xelatex
。自动渲染\section{Vocabularies}
尚未实现。这就是为什么在下面的 MWE 中我重复了彼
两次这句话。在后续阶段,我将尝试\phrase
仅在 中准备\section{Sentences}
并在 中重用\section{Vocabularies}
。
启用会tcbitemize
导致编译无限期停止。如何修复?
\documentclass{article}
\usepackage[a4paper,margin=2cm]{geometry}
\usepackage{xeCJK}
\setmainfont{Cambria}
\setCJKmainfont{ipaexm.ttf} % For furigana and other Japanese characters
\newCJKfontfamily\strokefont{KanjiStrokeOrders_v3.001.ttf} % For stroke order
\usepackage{ruby}
\usepackage[dvipsnames]{xcolor}
\def\GlobalSettings{%
\renewcommand\rubysep{0pt}%
\renewcommand\rubysize{0.4}%
\let\oldruby\ruby%
\renewcommand\ruby[2]{\oldruby{##1}{\textcolor{Red}{##2}}}%
}
\AtBeginDocument{\GlobalSettings}
\def\LocalSettings{%
\renewcommand\rubysep{1ex}%
\renewcommand\rubysize{.3}%
\let\oldruby\ruby%
\renewcommand\ruby[2]{\oldruby{\fontsize{65}{0}\selectfont\strokefont##1}{\fontsize{15}{0}\selectfont\textcolor{Red}{##2}}}%
}
\usepackage[many]{tcolorbox}
\def\phrase[#1]#2{\LocalSettings\tcbitem {\fontsize{15}{0}\selectfont#1\par}\vspace{15pt}\textcolor{Cyan}{\bfseries#2}}
\begin{document}
\section{Sentences}
\begin{enumerate}
\item \ruby{彼}{かれ}は目が大きい。
\end{enumerate}
\section{Vocabularies}
\newgeometry{margin=2mm}
% tcbitemize makes the compilation stops!
%\begin{tcbitemize}[%
%raster height=\textheight,
%raster columns=2,
%raster rows=5,
%size=fbox,
%sharp corners,
%halign=flush center,
%valign=center,
%boxrule=2pt, % line width
%raster column skip=-2pt, % negative line width
%raster row skip=-2pt, % negative line width
%colframe=Red,
%colback=White,
%]%
%\phrase[\ruby{彼}{かれ}]{he}
%\end{tcbitemize}
test
\restoregeometry
\end{document}
答案1
主要原因\let\oldruby\ruby
是\localsettings
(抱歉,我不得不评论一些字体设置)
\let\oldruby\ruby
在外部设置(\GlobalSettings
)中是可以的,但\let\oldruby\ruby
在命令中\LocalSettings
会导致恶性循环,即循环并且TeX
(无论xelatex / lualatex / pdflatex)都会失败。
据我了解,将使用包\ruby
提供的原始命令,因此将其存储起来,一切都应该没问题。ruby
\veryoldruby
\documentclass{article}
\usepackage[a4paper,margin=2cm]{geometry}
\usepackage{xeCJK}
% \setmainfont{Cambria}
\setCJKmainfont{ipaexm.ttf} % For furigana and other Japanese characters
\newCJKfontfamily\strokefont{KanjiStrokeOrders_v3.001.ttf} % For stroke order
\usepackage{ruby}
\usepackage[dvipsnames]{xcolor}
\let\veryoldruby\ruby%
\def\GlobalSettings{%
\renewcommand\rubysep{0pt}%
\renewcommand\rubysize{0.4}%
\let\oldruby\ruby%
\renewcommand\ruby[2]{\veryoldruby{##1}{\textcolor{Red}{##2}}}%
}
\AtBeginDocument{\GlobalSettings}
\def\LocalSettings{%
\renewcommand\rubysep{1ex}%
\renewcommand\rubysize{.3}%
% \let\oldruby\ruby%
\renewcommand\ruby[2]{\veryoldruby{\fontsize{65}{0}\selectfont ##1}{\fontsize{15}{0}\selectfont\textcolor{Red}{##2}}}%
% \renewcommand\ruby[2]{\veryoldruby{\fontsize{65}{0}\selectfont\strokefont##1}{\fontsize{15}{0}\selectfont\textcolor{Red}{##2}}}%
}
\usepackage[many]{tcolorbox}
\def\phrase[#1]#2{\LocalSettings\tcbitem {\fontsize{15}{0}\selectfont#1\par}\vspace{15pt}\textcolor{Cyan}{\bfseries#2}}
\begin{document}
\section{Sentences}
\begin{enumerate}
\item \ruby{foo}{bar} ... foobar%\ruby{彼}{かれ}は目が大きい。
\end{enumerate}
\section{Vocabularies}
\newgeometry{margin=2mm}
% tcbitemize makes the compilation stops!
\begin{tcbitemize}[%
raster height=\textheight,
raster columns=2,
raster rows=5,
size=fbox,
sharp corners,
halign=flush center,
valign=center,
boxrule=2pt, % line width
raster column skip=-2pt, % negative line width
raster row skip=-2pt, % negative line width
colframe=Red,
colback=White,
]%
% \phrase[\ruby{彼}{かれ}]{he}
\phrase[\ruby{foo}{bar}]{he}
\end{tcbitemize}
% test
\restoregeometry
\end{document}
TF Sturm 将对代码进行改进tcbitem
;-)
答案2
Christian Hupfer 已经完成了消除无限循环的主要工作。现在,代码正在运行。作为附加组件,我将用此处此应用程序的环境替换tcbitemize
环境tcbraster
。原因是这\tcbitem
是一个棘手的宏,它会关闭和打开环境,可能当嵌入到其他宏(如\phrase
示例中的宏)中时会导致问题。
\documentclass{article}
\usepackage[a4paper,margin=2cm]{geometry}
\usepackage{xeCJK}
% \setmainfont{Cambria}
\setCJKmainfont{ipaexm.ttf} % For furigana and other Japanese characters
\newCJKfontfamily\strokefont{KanjiStrokeOrders_v3.001.ttf} % For stroke order
\usepackage{ruby}
\usepackage[dvipsnames]{xcolor}
\let\veryoldruby\ruby%
\def\GlobalSettings{%
\renewcommand\rubysep{0pt}%
\renewcommand\rubysize{0.4}%
\let\oldruby\ruby%
\renewcommand\ruby[2]{\veryoldruby{##1}{\textcolor{Red}{##2}}}%
}
\AtBeginDocument{\GlobalSettings}
\def\LocalSettings{%
\renewcommand\rubysep{1ex}%
\renewcommand\rubysize{.3}%
% \let\oldruby\ruby%
\renewcommand\ruby[2]{\veryoldruby{\fontsize{65}{0}\selectfont ##1}{\fontsize{15}{0}\selectfont\textcolor{Red}{##2}}}%
% \renewcommand\ruby[2]{\veryoldruby{\fontsize{65}{0}\selectfont\strokefont##1}{\fontsize{15}{0}\selectfont\textcolor{Red}{##2}}}%
}
\usepackage[many]{tcolorbox}
\def\phrase[#1]#2{\begin{tcolorbox}\LocalSettings{\fontsize{15}{0}\selectfont#1\par}\vspace{15pt}\textcolor{Cyan}{\bfseries#2}\end{tcolorbox}}
\begin{document}
\section{Sentences}
\begin{enumerate}
\item \ruby{foo}{bar} ... foobar%\ruby{彼}{かれ}は目が大きい。
\end{enumerate}
\section{Vocabularies}
\newgeometry{margin=2mm}
\begin{tcbraster}[%
raster height=\textheight,
raster columns=2,
raster rows=5,
size=fbox,
sharp corners,
halign=flush center,
valign=center,
boxrule=2pt, % line width
raster column skip=-2pt, % negative line width
raster row skip=-2pt, % negative line width
colframe=Red,
colback=White,
]%
\phrase[\ruby{彼}{かれ}]{he}
\phrase[\ruby{彼}{かれ}]{he}
\phrase[\ruby{彼}{かれ}]{he}
\phrase[\ruby{彼}{かれ}]{he}
\phrase[\ruby{foo}{bar}]{he}
\end{tcbraster}
% test
\restoregeometry
\end{document}