In the following code, it seems that using \edef with CJK contents may fail. (I used pdflatex, UTF8 encoding.)
\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}
What is meant in the error message? How to \edefine a macro with CJK characters?
Addition on 18 July 2014
Thanks to egreg and Herbert. I tried \protected@edef but then \global fails.
\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}
How should I rewrite so that the effect of \protected@edef is global?
\protected@edefshould be what you're looking for. Remember\makeatletter(see http://tex.stackexchange.com/questions/8351/what-do-makeatletter-and-makeatother-do) – egreg Jul 16 '14 at 09:55\protected@edefis called\protected@xdef(cf.\edefand\xdef). – Joseph Wright Jul 18 '14 at 07:10