
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 \uppercase
destruirá 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 \uppercase
simplemente 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
¿Divertido? Un poco.
El hecho es que \uppercase
es una primitiva TeX querequiere {
después de. Para ello, expande los tokens posteriores; cualquier \relax
token 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 \test
los resultados en {abc}def
, {abc}
es procesada por \uppercase
y obtenemos "ABCdef".
Por el contrario, \MakeUppercase
es una macro con un solo argumento.
Evite omitir llaves alrededor de los argumentos. Y evítelo \uppercase
con LaTeX.