使用该软件包\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}
排版 ě、í 和 ǖ。你不需要pinyin
package 来实现这一点。而且pinyin
package 本身只是这些重音符号的缩写。
2. 更好的实施
说实话,pinyin
CTAN 上的包实现得并不好。例如,重新定义\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 或latex
CJK 来编译此文件。由于某些元音由处理,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 用于命令的参数。