zxjatype 包中的单引号 (') 后空格过大 U+2019

zxjatype 包中的单引号 (') 后空格过大 U+2019

我的文本中只有一些日语单词,我使用zxjatypezxjafont包来获得日语字体的渲染。但问题是所有出现的单引号() 后面的空格太大。

因此,有了以下 MWE……

\documentclass{article}
\usepackage{zxjatype}
\usepackage[ipa]{zxjafont}
\begin{document}

\section{日本語}
Machin
お早う

l’orem

\textsf{こんにちわ}

\end{document}

我得到了这个渲染:

我补充说,我无法用 替换 字符'我确实需要使用U+2019

那么,如何删除引号后面的空格?


更新:我需要U+2019特别使用。

答案1

U+2019 字符似乎表示要转换为日语。不清楚遵循什么规则,但在转换时会添加空格;而且 IPAMincho 中的 U+2019 字符与假名字符的宽度相同,导致空格非常宽。

'使用时不会发生这种情况。

\documentclass{article}
\usepackage{zxjatype}
\usepackage[ipa]{zxjafont}

\begin{document}

\section{日本語}

Machinお早うMachin

l’orem

l'orem

\textsf{こんにちわ}

\end{document}

在此处输入图片描述

我不懂日语,所以不知道这是否会产生不利影响:

\documentclass{article}
\usepackage{zxjatype}
\usepackage[ipa]{zxjafont}

\XeTeXcharclass`’=\XeTeXcharclass`A

\begin{document}

\section{日本語}

Machinお早うMachin

l’orem

l'orem

\textsf{こんにちわ}

\end{document}

在此处输入图片描述

答案2

我现在有一些时间,所以我想将我对 egreg 的回答的评论作为我自己的评论发布出来并提供一些附加信息。

正如 egreg 猜测的那样,U+2019 被认为是日文字符,并进行了以下调整:

  • 切换到日文字体
  • 在 CJK 和拉丁字符之间插入空格

如果您想禁用这些调整,可以\textrawen使用提供的zxjatype选项。我认为这比使用低级原语更安全。

\documentclass{article}
\usepackage{zxjatype}
\usepackage[ipa]{zxjafont}
\begin{document}

\section{日本語}
Machin
お早う

l’orem
l\textrawen{’}orem

\textsf{こんにちわ}

\end{document}

\exdrawen 和 w/o 之间的差异

如果你不想\textrawen每次书写时都使用,并且文档中的所有字符都可以安全地假定为拉丁字符,则可以使用newunicodechar包裹。

\documentclass{article}
\usepackage{newunicodechar}
\usepackage{zxjatype}
\usepackage[ipa]{zxjafont}
\newunicodechar{’}{\textrawen{’}}
\begin{document}

\section{日本語}
Machin
お早う

l’orem

\textsf{こんにちわ}

\end{document}

newunicodechar 示例

顺便说一句,“Machin”和“お早う”之间的空格在 OP 的代码和 egreg 的代码中是不同的。请考虑以下示例:

\documentclass{article}
\usepackage{zxjatype}
\usepackage[ipa]{zxjafont}
\xeCJKsetup{
  CJKecglue =
    { \hspace { 1em } }
    % initially set to \hspace { 0.25em plus 0.15em minus 0.05em } by zxjatype.
}
\begin{document}
Machin%
お早う
Machin
\end{document}

CJKecglue 和 whitespace 之间的区别

前者就是我上面提到的 CJK 和拉丁字符之间的空格,后者就是 插入的空格\n。两者都可以,但请确保在同一文档中保持一致。


正如名称所暗示的那样,zxjatype这是一个包排版用 XeLaTeX 排版一份日文文档,xeCJK用 XeLaTeX 排版一份中日韩文档。既然你说

我的文本中只有一些日语单词

在问题中,您似乎不是要用日语制作整个文档,而是将几个日语单词放在拉丁字符文档中。在这种情况下,使用zxjatypeandxeCJK是一种过度使用,甚至可能像这个问题一样有害。

如果你只想使用带有日文字体的字体,fontspec足够。

\documentclass{article}
\usepackage{fontspec}
\newfontfamily{\mainja}{ipam.ttf}
\newfontfamily{\sansja}{ipag.ttf}
\newcommand*{\textsfja}[1]{{\sansja #1}}
\begin{document}
English, Français, and {\mainja 日本語} \par
\sffamily English, Français, and \textsfja{日本語}
\end{document}

字体规格示例

请注意,由于如果没有 ,CJK 和拉丁字符之间的空格不会自动插入zxjatype,因此您需要使用 ASCII 空格来分隔单词。

答案3

最后,我没有使用,而是用zxjatype解决了这个问题xeCJK

相关内容