1. 快速解决方案

1. 快速解决方案

使用该软件包\pinyin,可以使用诸如 之类的命令来书写拼音。该软件包产生的音调标记比、等\bu4提供的音调标记好得多。\'\v

该包\pinyin中包含了所有完整单词的拼音,以及和\a\o因为这些本身就可以是单词),但是,我需要单独排版剩余的韵母:

ē é ě è ī í ǐ ì ū ú ǔ ù ǖ ǘ ǚ ǜ

这些很少会单独出现,因此,我无法找到pinyin包中提供的任何可以打印它们的命令,所以我认为作者忽略了这一点。

我在以下网址找到了一份源代码加拿大运输安全局然而,它似乎没有使用 LaTeX 代码来定义事物。我相信这个代码中的某个地方有很多答案,但它充满了这些奇怪@#不寻常的东西:

\def\py@@#1#2#3#4{
  \py@kern{#2}#1
  \ifcase #4
    \or\py@macron #1{.3}\or\py@acute #1\or\py@hacek #1\or\py@grave #1\or #1
  \fi
  \py@kern #1{#3}}

\def\py@a{\py@@ a}
\def\py@A{\py@@ A}

\def\py@e{\py@@ e}
\def\py@E{\py@@ E}

\def\py@i#1#2#3{
  \py@kern{#1}i
  \ifcase #3
    \or\py@macron\i{.3}\or\py@acute\i\or\py@hacek\i\or\py@grave\i\or i
  \fi
  \py@kern i{#2}}
\def\py@I{\py@@ I}

\def\py@o{\py@@ o}
\def\py@O{\py@@ O}

\def\py@u{\py@@ u}
\def\py@U{\py@@ U}

我怎样才能复制该包的结果pinyin,但只显示韵母(结尾元音)本身?

更新:只是为了澄清,我不需要所有的韵母(即 -ue、-ing),因为我可以用字母组合来排版它们。

答案1

1. 快速解决方案

首先,让我简短地回答你的问题:请随意使用\v{e}\'\i\={\"u}排版 ě、í 和 ǖ。你不需要pinyinpackage 来实现这一点。而且pinyinpackage 本身只是这些重音符号的缩写。

2. 更好的实施

说实话,pinyinCTAN 上的包实现得并不好。例如,重新定义\mu为拼音是很危险的,因为它是希腊字母!

这是蒋(ID:pointer)对中文拼音的更好实现,来自CTeX 论坛,一个中文 TeX 社区:

\documentclass{article}
\usepackage[UTF8]{ctex}% for Chinese, but not necessary for Pinyin

% Definitions of Pinyin
\makeatletter
\def\py@yunpriv#1{%
  \if a#1 10\else
  \if o#1 9\else
  \if e#1 8\else
  \if i#1 7\else
  \if u#1 6\else
  \if v#1 5\else
  \if A#1 4\else
  \if O#1 3\else
  \if E#1 2\fi\fi\fi\fi\fi\fi\fi\fi\fi0
}

\def\py@init{%
  \edef\py@befirst{}%
  \edef\py@char{}\edef\py@tuneletter{}%
  \def\py@last{}%
  \def\py@tune{5}%
}

% Usage:
% \pinyin{Hao3hao3\ xue2xi2} (好好学习)
\def\pinyin#1{%
  \edef\py@postscan{#1}%
  \py@init
  % scan
  \loop
  \edef\py@char{\expandafter\@car\py@postscan\@nil}%
  \edef\py@postscan{\expandafter\@cdr\py@postscan\@nil}%
  \ifnum 0 < 0\py@char
    \edef\py@tune{\py@char}%
    \py@first \py@tuneat\py@tuneletter\py@tune \py@last\kern -4sp\kern 4sp{}\py@init
  \else
    \ifnum\py@yunpriv\py@char > \py@yunpriv\py@tuneletter
      \edef\py@tuneletter{\py@char}\edef\py@first{\py@befirst}\def\py@last{}%
    \else
      \edef\py@last{\py@last\if v\py@char\"u\else\py@char\fi}%
    \fi
    \edef\py@befirst{\py@befirst\if v\py@char\"u\else\py@char\fi}%
  \fi
  \ifx\py@postscan\@empty\else
  \repeat
}

\let\py@macron \=
\let\py@acute \'
\let\py@hacek \v
\let\py@grave \`

%% \py@tuneat{Letter}{tune}
\def\py@tuneat#1#2{%
  \if v#1%
    \py@tune@v #2%
  \else
  \if i#1%
    \py@tune@i #2%
  \else
    \ifcase#2%
      \or\py@macron #1\or\py@acute #1\or\py@hacek #1\or\py@grave #1\else #1%
    \fi
  \fi\fi
}

\def\py@tune@v#1{{%
    \dimen@ii 1ex%
    \fontdimen5\font 1.1ex%
    \rlap{\"u}%
    \fontdimen5\font .6ex%
    \ifcase#1%
      \or\py@macron u\or\py@acute u\or\py@hacek u\or\py@grave u\else u%
    \fi
    \fontdimen5\font\dimen@ii
  }}

\def\py@tune@i#1{%
  \ifcase#1
    \or\py@macron \i\or\py@acute \i\or\py@hacek \i\or\py@grave \i\else i%
  \fi
}
\makeatletter
% End of pinyin

\begin{document}

女人 \pinyin{nv3ren2}

木头 \pinyin{mu4tou5} --- $\mu$ % no conflicts

韵母 \pinyin{a1\ i3\ u4\ v2}

啊\pinyin{A1} 哦\pinyin{O4} 恶心吧\pinyin{E3xin1\ ba5}

西安\pinyin{Xi1'an1}

好好学习\pinyin{Hao3hao3\ xue2xi2}

\end{document}

在此处输入图片描述

3. 我最后的建议

现在我们推荐使用 XeTeXxeCJK进行 CJK 排版。XeTeX 是一个 Unicode TeX 引擎,因此您可以直接在源代码中使用 ě、í 和 ǖ,并借助一个好的 GUI 输入板。上面的例子可以改为:

% XeLaTeX needed
\documentclass{article}
\usepackage[UTF8]{ctex}

\begin{document}
女人 nǚrén

木头 mùtou --- $\mu$

韵母 ā ǐ ù ǘ
\end{document}

不要使用 pdfLaTeX 或latexCJK 来编译此文件。由于某些元音由处理,CJK但字体是全宽的(设计不佳),因此如果没有 XeTeX,结果可能会很奇怪。当然,如果您不需要 CJK 表意文字,您可以使用inputenc拼音元音包。

4. 有新xpinyin软件包可用

李清写了一篇新文章xpinyin包裹半自动排版拼音。

\documentclass{article}
\usepackage{xeCJK}
\usepackage{xpinyin}
\setmainfont{CMU Serif}
\setCJKmainfont{SimSun}
\begin{document}
\xpinyin*{汉语拼音示例}

\pinyin{nv3hai2zi}
\end{document}

答案2

好吧,我对 cjk 脚本一无所知,也不知道您所说的“finals”等是什么意思。但查看代码,我会说要获得类似的东西,\bu4您应该这样做:

\documentclass{article}
\usepackage{pinyin}

\begin{document}

\bu4 % defined with \py@DRC{\bu}{b\py@ ub{}#1} line 383

\makeatletter
\py@DRC{\be}{b\py@ eb{}#1} %use e instead of u
\makeatother 
\be4
\end{document}

顺便说一句:拼音的代码是普通文本。在这样的 sty 中,所有字母@都是普通字母,如 p 或 q,可用于命令名称。#1 用于命令的参数。

相关内容