Error con \mayúsculas en el campo de etiqueta de titlesec

Error con \mayúsculas en el campo de etiqueta de titlesec

Estoy intentando usar titlesec y formatear mis capítulos para que la etiqueta 'Capítulo' se muestre en MAYÚSCULAS. Si uso \MakeUppercase obtengo el resultado deseado.

\titleformat
{\chapter} % command
[display] % shape
{\bfseries\Large\itshape} % format
{\sffamily\huge\MakeUppercase\chaptertitlename{ }\thechapter} % label
{0.5ex} % sep
{
    \rule{\textwidth}{1pt}
    \vspace{1ex}
    \centering
} % before-code
[
\vspace{-0.5ex}%
\rule{\textwidth}{0.3pt}
] % after-code

Pero si uso \mayúsculas, aparece un Missing { inserted. \chapter{The First Chapter}error.

\titleformat
{\chapter} % command
[display] % shape
{\bfseries\Large\itshape} % format
{\sffamily\huge\uppercase\chaptertitlename{ }\thechapter} % label
{0.5ex} % sep
{
    \rule{\textwidth}{1pt}
    \vspace{1ex}
    \centering
} % before-code
[
\vspace{-0.5ex}%
\rule{\textwidth}{0.3pt}
] % after-code

Estoy usando pdfTeX 3.14159265-2.6-1.40.19 (TeX Live 2018/W32TeX). Recibo el mismo error si uso MikTeX 2.9.7100 x64. Esto es en Windows 7.

Puedo entender por qué no puedo usar \mayúsculas. Estoy preguntando esto para que si alguien más tiene este problema, no dedique mucho tiempo a depurarlo.

¡Gracias!

Mi documento completo es

\documentclass[a4paper,12pt]{book}
\usepackage[utf8]{inputenc}
\usepackage{graphicx}
\usepackage{titlesec}

\titleformat
{\chapter} % command
[display] % shape
{\bfseries\Large\itshape} % format
{\sffamily\huge\uppercase\chaptertitlename{ }\thechapter} % label
{0.5ex} % sep
{
    \rule{\textwidth}{1pt}
    \vspace{1ex}
    \centering
} % before-code
[
\vspace{-0.5ex}%
\rule{\textwidth}{0.3pt}
] % after-code

\begin{document}

\author{TeXstudio Team}
\title{Simple Book Example}
\date{January 2013}

\frontmatter
\maketitle
\tableofcontents

\mainmatter

\chapter{The First Chapter}

And now for something completely new

\chapter{The Second Chapter}

\backmatter
% bibliography, glossary and index would go here.

\end{document}

Respuesta1

latex proporciona \MakeUppercase porque \uppercasedestruirá una gran cantidad de texto, casi todo el texto si usa UTF-8 con letras que no sean ASCII. Sin embargo, el error específico aquí es

\uppercase\chaptertitlename

Los brackets no son opcionales, tiene que serlo.

\uppercase{\chaptertitlename}

de ahí el error de llave faltante que muestra.

Pero como se señaló anteriormente, esto romperá la codificación UTF-8 de cualquier texto que use letras acentuadas, ya que \uppercasesimplemente usa la tabla de mayúsculas ascii y la aplica a los bytes UTF-8, lo que producirá algo que no es UTF-8 válido.

Respuesta2

Prueba esto:

\documentclass{article}

\newcommand{\test}{{abc}def}

\begin{document}

\uppercase\test

\end{document}

La salida es

ingrese la descripción de la imagen aquí

¿Divertido? Un poco.

El hecho es que \uppercasees una primitiva TeX querequiere {después de. Para ello, expande los tokens posteriores; cualquier \relaxtoken o token de espacio se ignora y se reanuda la expansión. Este proceso de expansión finaliza tan pronto como se encuentra otro token no expandible: si es {, TeX procede a ejecutar \uppercase; de lo contrario, genera un error, inserta {y vuelve a leer ese token.

Esto debería explicar el resultado curioso anterior: la expansión de \testlos resultados en {abc}def, {abc}es procesada por \uppercasey obtenemos "ABCdef".

Por el contrario, \MakeUppercasees una macro con un solo argumento.

Evite omitir llaves alrededor de los argumentos. Y evítelo \uppercasecon LaTeX.

información relacionada