在下面的代码中,使用\edef
CJK 内容似乎可能会失败。(我使用了 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