带有 csname 和 utf-8 的动态宏

带有 csname 和 utf-8 的动态宏

我为动态变量名称和赋值编写了以下命令

% in class file
\RequirePackage[ngerman]{babel}
\RequirePackage[T1]{fontenc}
\RequirePackage[utf8]{inputenc}

% in latex file
\newcommand{\rev}[2]{%
  \expandafter\def\csname rev_\revprefix#1\endcsname{#2}
}

\newcommand{\grev}[1]{%
  \ifcsname rev_\revprefix#1\endcsname%
  \csname rev_\revprefix#1\endcsname
\fi}

这对于 ASCII 字符很有效,例如

\rev{value1}{Test}
\grev{value1} % gives Test

但不适用于变音符号(仅在 \rev 中)

\rev{value2}{Groß}
\grev{value2} % gives GroT1ss

我知道,这与内部字符表示和扩展有关,但我不知道如何修复它。有什么想法吗?

更新 [2014-01-15]

这是

\newcommand{\revprefix}{}

该问题仅发生在 hyperref 的 TextField 中:

\TextField[name=test, value=\grev{value2}]{test}

答案1

您需要一种不同的方式来生成字符串,使用\defpdfstring

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}

\usepackage{hyperref}

\newcommand{\revprefix}{}

\newcommand{\rev}[2]{%
  \expandafter\def\csname rev_\revprefix#1\endcsname{#2}%
  \expandafter\pdfstringdef\csname tfrev_\revprefix#1\endcsname{#2}%
}

\newcommand{\grev}[1]{%
  \ifcsname rev_\revprefix#1\endcsname
    \csname rev_\revprefix#1\endcsname
  \fi}
\newcommand{\tfgrev}[1]{%
  \ifcsname rev_\revprefix#1\endcsname
    \csname tfrev_\revprefix#1\endcsname
  \fi}

\begin{document}

\rev{value1}{Test}
\grev{value1} % gives Test

\rev{value2}{Groß}
\grev{value2}

\TextField[name=test, value=\tfgrev{value2}]{test}

\end{document}

当然,如果你不需要\grev文本以外的形式,定义\grev是没有用的。

相关内容