我想使用翻译包将德语星期几名称排版为大写,但我无法让它工作:
\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}