
Estou tentando usar o titlesec e formatar meus capítulos para que o rótulo 'Capítulo' seja renderizado em ALLCAPS. Se eu usar \MakeUppercase obtenho o resultado desejado.
\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
Mas se eu usar maiúsculas, recebo um Missing { inserted. \chapter{The First Chapter}
erro.
\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
Estou usando o pdfTeX 3.14159265-2.6-1.40.19 (TeX Live 2018/W32TeX). Recebo o mesmo erro se usar o MikTeX 2.9.7100 x64. Isso está no Windows 7.
Posso descobrir por que não consigo usar maiúsculas. Estou perguntando isso para que, se alguém tiver esse problema, não perca muito tempo depurando isso.
Obrigado!
Todo o meu documento é
\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}
Responder1
O látex fornece \MakeUppercase
porque \uppercase
destruirá muito texto, quase todo o texto, se você estiver usando UTF-8 com letras não ASCII. No entanto, o erro específico aqui é
\uppercase\chaptertitlename
O aparelho não é opcional, tem que ser
\uppercase{\chaptertitlename}
daí o erro de chave ausente que você mostra.
Mas, como observado acima, isso quebrará a codificação UTF-8 de qualquer texto usando letras acentuadas, pois \uppercase
simplesmente usa a tabela ASCII maiúscula e a aplica aos bytes UTF-8, o que produzirá algo que não é UTF-8 válido.
Responder2
Experimente isto:
\documentclass{article}
\newcommand{\test}{{abc}def}
\begin{document}
\uppercase\test
\end{document}
A saída é
Engraçado? Um pouco.
O fato é que \uppercase
é uma primitiva TeX querequer {
depois disso. Para este fim, ele expande os tokens depois dele; qualquer \relax
token ou token de espaço é ignorado e a expansão é retomada. Este processo de expansão termina assim que outro token não expansível é encontrado: se for {
, o TeX prossegue com a execução \uppercase
; caso contrário, gera um erro, insere {
e relê esse token.
Isso deve explicar a saída engraçada acima: a expansão dos \test
resultados em {abc}def
, então {abc}
é processada por \uppercase
e obtemos “ABCdef”.
Pelo contrário, \MakeUppercase
é uma macro com um argumento.
Evite omitir colchetes em torno dos argumentos. E evite \uppercase
com LaTeX.