阶段1

阶段1

首先,在下面的输入文件中,我使用了汉字笔顺字体。因此,请从此处下载字体网站(点击)

真正的目的是编写一个日语句子的枚举列表。标有 的汉字短语\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}

相关内容