macros

\mayúsculas en \nuevocomando

Traté de usar \uppercase en \newcommand :

\newcommand\universidad{My University}
\newcommand\Universidad{\uppercase{\universidad}} 

Cuando lo uso me sale esto,

My University

y no,como se esperaba,esto

MY UNIVERSITY

Why?

EDIT

No puedo usar \MakeUppercase porque necesito usar comillas latinas, ejemplo: ingeniería. Y este caso latino tiene problemas con \MakeUppercase



Con las codificaciones latin1 y utf8 obtengo la salida correcta de

\newcommand{\facultad}{Ingeniería}
\newcommand{\Facultad}{\expandafter\MakeUppercase\expandafter{\facultad}}
\Facultad

El problema con su definición es que \uppercase actúa sobre la lista de tokens \universidad y no hace nada, porque en ese nivel no hay letra para ser mayúscula; \universidad se amplía sólo más tarde. Con \expandafter realizamos la expansión antes de que entre en acción \MakeUppercase .

Solo como ejercicio, aquí hay una macro \Capitalize que toma como argumento una secuencia de control y define su "variante en mayúsculas"

\makeatletter
\newcommand{\Capitalize}[1]{%
  \edef\{\expandafter\\string#1}%
  \edef\{\expandafter\\\}%
  \edef\{\expandafter\\\}%
  \uppercase\expandafter{\expandafter\def\expandafter\\expandafter{\}}%
  \{\\}{\expandafter\MakeUppercase\expandafter{#1}}}
\makeatother

Después de este código mágico puedes decir

\newcommand\universidad{Universidad de Lugar}
\newcommand{\facultad}{Ingeniería}

\Capitalize{\universidad}
\Capitalize{\facultad}

definirá también \Universidad y \Facultad que imprimirán "UNIVERSIDAD DE LUGAR" e "INGENIERÍA".

Tenga en cuenta que \MakeUppercase no va junto con hyperref , por lo que en caso de que use estos comandos donde este paquete extrae algo para crear marcadores, debe darle una lista de tokens seguros; por ejemplo

\newcommand{\Facultad}{%
   \texorpdfstring{\expandafter\MakeUppercase\expandafter{\facultad}}%
      {\facultad}}

y,en el comando de definición automática,cambiar la línea

\{\\}{\expandafter\MakeUppercase\expandafter{#1}}}

into

\{\\}{%
  \texorpdfstring{\expandafter\MakeUppercase\expandafter{#1}}{#1}}}

En caso de que se use utf8x , las definiciones deben estar precedidas por \PrerenderUnicode :

\PrerenderUnicode{Ingeniería}
\newcommand{\facultad}{Ingeniería}
\newcommand{\Facultad}{\expandafter\MakeUppercase\expandafter{\facultad}}

La macro \Capitalize podría ser

\makeatletter
\newcommand{\Capitalize}[1]{%
  \{inputenc}{utf8x}{\PrerenderUnicode{#1}}{}%
  \edef\{\expandafter\\string#1}%
  \edef\{\expandafter\\\}%
  \edef\{\expandafter\\\}%
  \uppercase\expandafter{\expandafter\def\expandafter\\expandafter{\}}%
  \{\\}{\expandafter\MakeUppercase\expandafter{#1}}}
\makeatother

para que \PrerenderUnicode se ejecute automáticamente cuando sea necesario.




Debe usar \MakeUppercase en lugar de \uppercase uppercase . Para obtener información sobre la diferencia, consulte las rarezas de cambio de caso de las preguntas frecuentes de UK TeX.

Para ligaduras como í , puede escapar del carácter usando \'{i} , o usarlo tal cual con

\usepackage[utf8]{inputenc}

en el preámbulo de su documento.Esto debería acomodar el uso de ligaduras en su entrada.

\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}​