我想排版一份包含一些中文单词音标的文档。我想用中文字符来写这些单词,所以我xeCJK
为此加载了该包。我还加载了该tipauni
包以方便排版音标(这比手动输入实际的 unicode 要快得多)。
然而,我发现同时加载xeCJK
和tipauni
会导致一些 IPA 变音符号的位置向右移动太多,如下所示:
正确的位置应该是这样的(如果我注释掉,我会得到\usepackage{xeCJK}
:
如果我直接输入unicode,它会正确显示;以下内容来自\textipa{\s{m}}m̩
(第二个字符直接应用了unicode变音符号):
因此,这似乎是关于如何tipauni
在内部处理变音符号的问题,而不是xeCJK
关于 unicode 如何总体呈现的问题。
我尝试了两种加载软件包的顺序,但似乎没有什么区别。有办法解决这个问题吗?我更喜欢使用这种方法,tipauni
而不是“手动”调整 unicode。
梅威瑟:
\documentclass{article}
\usepackage[documentfont=DoulosSIL]{tipauni}
\usepackage{xeCJK} % fine if this is commented out
\begin{document}
\textipa{\|x{m}\s{m}}
\end{document}
答案1
如果我添加\showoutput
我得到
....\TU/DoulosSIL(0)/m/n/10 m̽m̩
当xeCJK
没有加载时,但是
....\TU/DoulosSIL(0)/m/n/10 m
....\kern -0.0002
....\kern 0.0002
....\TU/DoulosSIL(0)/m/n/10 ̽
....\kern -0.0002
....\kern 0.0002
....\TU/DoulosSIL(0)/m/n/10 m
....\kern -0.0002
....\kern 0.0002
....\TU/DoulosSIL(0)/m/n/10 ̩
....\kern -0.0002
....\kern 0.0002
是的话就没问题了。问题出在由 激活的 interchar 标记中xeCJK
。
我建议在 的开头添加一些可选设置\textipa
(但在打开的组内)。您可以向 的开发人员提出补丁tipauni
。
在这种情况下,额外的设置是本地禁用xeCJK
功能。
\documentclass{article}
\usepackage[documentfont=DoulosSIL]{tipauni}
\usepackage{xeCJK} % fine if this is commented out
\ExplSyntaxOn
\RenewDocumentCommand\textipa{ +m }
{
\group_begin:
\l__tipauni_extras_tl % <--- added
\cs_set_eq:NN \* \tipaunistar
\cs_set_eq:NN \: \tipaunicolon
\cs_set_eq:NN \; \tipaunisemicolon
\cs_set_eq:NN \! \tipaunibang
\cs_set_eq:NN \| \tipaunipipe
\cs_set_eq:NN \t \tipaunit
\seq_map_inline:Nn \l__tipauni_remove_from_accents_seq
{ \tl_remove_all:Nn \l_text_accents_tl {##1} }
\tl_set:Nx \l__tipauni_textipa_tl { \text_expand:n {#1} }
\use:x
{
\exp_not:n
{
\escapechar = `\\
\tl_set:Nx \l__tipauni_textipa_tl
{ \exp_args:No \__tipauni_act:n \l__tipauni_textipa_tl }
\escapechar =
}
\int_use:N \escapechar
}
\exp_stop_f:
\l__tipauni_textipa_tl
\__tipauni_nontipa_search:
\group_end:
}
\tl_new:N \l__tipauni_extras_tl
\NewDocumentCommand{\settipaextras}{m}
{
\tl_set:Nn \l__tipauni_extras_tl { #1 }
}
\ExplSyntaxOff
\settipaextras{\xeCJKsetup{xeCJKactive=false}}
\begin{document}
\textipa{\|x{m}\s{m}}
\end{document}
注意:对于仅使用受支持的命令的输入,会收到“不支持的命令”警告,这很奇怪。此外,警告中提到的不受支持的命令列表在手册中没有出现过。
答案2
您可以加载xunicode-addon
(或仅仅xunicode
)包来代替tipauni
,它还提供\textipa
。
\documentclass{article}
\usepackage{xeCJK}
\usepackage{xunicode-addon}
\setmainfont{Doulos SIL}
\begin{document}
\textipa{\|x{m}\s{m}}
\end{document}
但是,有一些特殊命令只有 提供,详情tipauni
请阅读 的文档。tipauni
xeCJK
或者你可以本地关闭:
\documentclass{article}
\usepackage[documentfont=DoulosSIL]{tipauni}
\usepackage{xeCJK} % fine if this is commented out
% renewcommand \textipa is not recommended
\newcommand\mytipa[1]{{\xeCJKsetup{xeCJKactive=false}\textipa{#1}}}
\begin{document}
\mytipa{\|x{m}\s{m}}
\end{document}