我尝试\uppercase
使用\newcommand
:
\newcommand\universidad{My University}
\newcommand\Universidad{\uppercase{\universidad}}
当我使用它时,我得到了这个,
我的大学
而不是像预期的那样,
我的大学
为什么?
编辑
我不能使用,\MakeUppercase
因为我需要使用拉丁引文,例如:ingeniería。这个拉丁文案例有问题\MakeUppercase
答案1
使用latin1
和utf8
编码我得到正确的输出
\newcommand{\facultad}{Ingeniería}
\newcommand{\Facultad}{\expandafter\MakeUppercase\expandafter{\facultad}}
\Facultad
您的定义存在问题,即\uppercase
作用于标记列表\universidad
,但什么也不做,因为在该级别没有要大写的字母;\universidad
仅在稍后扩展。\expandafter
我们在 执行之前执行扩展\MakeUppercase
。
作为练习,这里有一个宏\Capitalize
,它以控制序列作为参数并定义其“大写变体”
\makeatletter
\newcommand{\Capitalize}[1]{%
\edef\@tempa{\expandafter\@gobble\string#1}%
\edef\@tempb{\expandafter\@car\@tempa\@nil}%
\edef\@tempa{\expandafter\@cdr\@tempa\@nil}%
\uppercase\expandafter{\expandafter\def\expandafter\@tempb\expandafter{\@tempb}}%
\@namedef{\@tempb\@tempa}{\expandafter\MakeUppercase\expandafter{#1}}}
\makeatother
执行此魔法代码后你可以说
\newcommand\universidad{Universidad de Lugar}
\newcommand{\facultad}{Ingeniería}
\Capitalize{\universidad}
\Capitalize{\facultad}
也将定义\Universidad
并\Facultad
打印“UNIVERSIDAD DE LUGAR”和“INGENIERÍA”。
请注意,\MakeUppercase
不符合超链接,因此如果您使用这些命令,该包会提取一些内容来构建书签,您应该给它一个安全的令牌列表;例如
\newcommand{\Facultad}{%
\texorpdfstring{\expandafter\MakeUppercase\expandafter{\facultad}}%
{\facultad}}
并在自动定义命令中,更改行
\@namedef{\@tempb\@tempa}{\expandafter\MakeUppercase\expandafter{#1}}}
进入
\@namedef{\@tempb\@tempa}{%
\texorpdfstring{\expandafter\MakeUppercase\expandafter{#1}}{#1}}}
如果使用utf8x
,则定义前面必须加上\PrerenderUnicode
:
\PrerenderUnicode{Ingeniería}
\newcommand{\facultad}{Ingeniería}
\newcommand{\Facultad}{\expandafter\MakeUppercase\expandafter{\facultad}}
宏\Capitalize
可能是
\makeatletter
\newcommand{\Capitalize}[1]{%
\@ifpackagewith{inputenc}{utf8x}{\PrerenderUnicode{#1}}{}%
\edef\@tempa{\expandafter\@gobble\string#1}%
\edef\@tempb{\expandafter\@car\@tempa\@nil}%
\edef\@tempa{\expandafter\@cdr\@tempa\@nil}%
\uppercase\expandafter{\expandafter\def\expandafter\@tempb\expandafter{\@tempb}}%
\@namedef{\@tempb\@tempa}{\expandafter\MakeUppercase\expandafter{#1}}}
\makeatother
以便\PrerenderUnicode
在需要时自动执行。
答案2
您需要使用\MakeUppercase
而不是\uppercase
。有关差异的信息,请参阅大小写转换的奇怪现象来自 TeX FAQ。
对于像 这样的连字符í
,你可以使用 来转义该字符\'{i}
,也可以使用
\usepackage[utf8]{inputenc}
在您的文档序言中。这应该可以适应您在输入中使用连字符。
\documentclass{article}
\usepackage[utf8]{inputenc}
\begin{document}
\begin{tabular}{ll}
\verb!\MakeUppercase{ingeniería}!: & \MakeUppercase{ingeniería} \\
\verb!\MakeUppercase{ingenier\'{i}a}!: & \MakeUppercase{ingenier\'{i}a}
\end{tabular}
\end{document}
答案3
就我而言,这篇文章确实很有帮助:
https://texfaq.org/FAQ-casechange
我用:
\usepackage[overload]{textcase}
(...)
\newcommand{\iemph}[1]{\MakeTextUppercase{#1}}
(...)
\begin{document}
XXX \iemph{abc def ghi}