tipauni,xeCJK:加载 xeCJK 会弄乱 IPA 变音符号的位置

tipauni,xeCJK:加载 xeCJK 会弄乱 IPA 变音符号的位置

我想排版一份包含一些中文单词音标的文档。我想用中文字符来写这些单词,所以我xeCJK为此加载了该包。我还加载了该tipauni包以方便排版音标(这比手动输入实际的 unicode 要快得多)。

然而,我发现同时加载xeCJKtipauni会导致一些 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}

结果

相关内容