我很难理解以下行为。我试图在数学模式下使用日语字符。在使用 CJK 的某个乳胶文档中,以下代码可以正确呈现:
We have $x = \mbox{山}$
也就是说,我能够在方程式中的 \mboxes 中放置汉字,一切正常。但是,如果我尝试:
\newcommand{\san}{\mbox{山}}
...
\begin{document}
We have $x = \san$
结果输出为“x =(空格)”这是一个有效/无效的示例:
\documentclass{article}
\usepackage{CJK}
\newcommand{\san}{\mbox{山}}
\begin{document}
\begin{CJK}{UTF8}{min}
The equations $x = \san$ and $x = \mbox{山}$ should look the same.
\end{CJK}
\end{document}
当我使用 pdflatex 编译上述示例时,我得到:“方程式 x = 和 x = 山 应该看起来相同。” 我的问题是:有没有办法定义宏 \san 来生成正确的行为?
答案1
您必须在 CJK 环境中定义该命令。然后必须使该定义成为全局定义。
\begin{CJK}{UTF8}{}
\gdef\foo{山}
\end{CJK}
答案2
由于您似乎主要使用 UTF8 编码,因此加载该CJKutf8
包对我来说是有效的。
\documentclass{article}
\usepackage{CJKutf8}
\newcommand{\san}{\mbox{山}}
\begin{document}
\begin{CJK}{UTF8}{min}
The equations $x = \san$ and $x = \mbox{山}$ should look the same.
\end{CJK}
\end{document}
答案3
环境CJK
负责为组成 CJK 字符的字节簇赋予含义(从技术上讲,它激活这些字符)。当您给出 的定义时\san
,组成 山 的三个字节不处于活动状态,并且在\san
扩展时它们仍保持活动状态。
解决方案。当字符被正确解释时执行定义:
\begin{CJK}{UTF8}{min}
\gdef\san{\mbox{山}}
\end{CJK}
你不能使用\newcommand
,因为它不执行全局定义,除非你说
\begin{CJK}{UTF8}{min}
\globaldefs=1
\newcommand{\san}{\mbox{山}}
\end{CJK}
但我不会使用它,因为它似乎\end{CJK}
可以执行全局的分配(并且可能不是有意的)。