\edef 和 CJK 的问题

\edef 和 CJK 的问题

在下面的代码中,使用\edefCJK 内容似乎可能会失败。(我使用了 pdflatex,UTF8 编码。)

\documentclass{article}
\usepackage{CJK}
\begin{document}
\begin{CJK*}{UTF8}{bsmi}
\newcommand{\tiangan}[1]{\ifcase #1%
\or甲\or乙\or丙\or丁\or戊\or己\or庚\or辛\or壬\or癸\fi}

\newcount\fuu\fuu=3
\def\ber{\romannumeral\fuu}
\fuu=4
\ber%iv
\edef\ber{\romannumeral\fuu}% successes in \edef-ining \ber as iv
%\show\ber
\fuu=5%iv
\ber%iv

\def\faa{三}
\def\bor{\faa}
\def\faa{四}
\bor%四
\edef\bor{\faa}% fails in \edef-ining \bor as 四
%\show\bor
\def\faa{五}
\bor%

\def\foo{3}
\def\bar{\tiangan{\foo}}
\def\foo{4}
\bar%丁
\edef\bar{\tiangan{\foo}}% fails in \edef-ining \bar as 丁
%\show\bar
\def\foo{5}
\bar%

\end{CJK*}
\end{document}

错误信息是什么意思?如何\edef用 CJK 字符编写宏?


2014 年 7 月 18 日添加

感谢 egreg 和 Herbert。我尝试过\protected@edef\global失败了。

\documentclass{article}
\usepackage{CJK}
\begin{document}
\begin{CJK*}{UTF8}{bsmi}
\newcommand{\tiangan}[1]{\ifcase #1%
\or甲\or乙\or丙\or丁\or戊\or己\or庚\or辛\or壬\or癸\fi}
\makeatletter

\def\ber{\romannumeral3}%iii
{%
  \global\edef\ber{\ber\romannumeral4}%iiiiv
  \show\ber
  \ber
}
\show\ber
\ber%iiiiv

\def\bar{\tiangan{3}}%丙
{%
  \global\protected@edef\bar{\bar\tiangan{4}}%丙丁
  \show\bar
  \bar%
}
\show\bar
\bar%丙

\end{CJK*}
\end{document}

我该如何重写才能使效果达到\protected@edef全局呢?

答案1

我不知道该cjk包有什么用,但你可以使用:

\makeatletter
\protected@xdef\bor{\faa}% doesn't fail in \edef-ining \bor as 四
\makeatletter

以及其他\edef

相关内容