我为动态变量名称和赋值编写了以下命令
% 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
是没有用的。