将 \translate 后的字符串变为大写

将 \translate 后的字符串变为大写

我想使用翻译包将德语星期几名称排版为大写,但我无法让它工作:

\documentclass[ngerman]{article}
\usepackage{babel}
\usepackage{translator}
\usedictionary{translator-months-dictionary}

\begin{document}

\translate{Monday}
\uppercase{\translate{Monday}}
\expandafter\uppercase\expandafter{\translate{Monday}}
\MakeUppercase{\translate{Monday}}
\expandafter\MakeUppercase\expandafter{\translate{Monday}}

\end{document}

结果是

Montag MONDAY MONDAY MONDAY MONDAY

如何获得MONTAG

答案1

这有效:

   \translatelet\foo{Monday}\MakeUppercase{\foo}

或者对于 pgf 示例

{\def\translate#1{\translatelet\foo{#1}\MakeUppercase{\foo}}%
\pgfcalendarweekdayname{0}}

答案2

\uppercase{\translate{Monday}}只需做

\translate{MONDAY}

结果为“MONDAY”,因为字符串未知。其他尝试也会出现同样的情况,因为\translate没有以独特的步骤进行扩展(并且也不能完全扩展)。

有一个解决方法:命令\translate{xyz}实际上调​​用

\translatelet\trans@temp{xyz}\trans@temp

也就是说,它将翻译后的字符串存储到\trans@temp,然后使用该字符串。所以我们可以使用相同的机制并放在\MakeUppercase适当的位置。我将\translateUC使用相同的语法进行定义\translate

\documentclass[ngerman]{article}
\usepackage{babel}
\usepackage{translator}
\usedictionary{translator-months-dictionary}

\makeatletter
\newcommand{\translateUC}[2][]{%
  \translatelet[#1]\trans@temp{#2}%
  \MakeUppercase{\trans@temp}}
\makeatother

\begin{document}

\translate{Monday}

\translateUC{Monday}

\end{document}

在此处输入图片描述

相关内容