Fehler mit \uppercase im Labelfeld von titlesec

Fehler mit \uppercase im Labelfeld von titlesec

Ich versuche, titlesec zu verwenden und meine Kapitel so zu formatieren, dass die Beschriftung „Kapitel“ in GROSSBUCHSTABEN wiedergegeben wird. Wenn ich \MakeUppercase verwende, erhalte ich das gewünschte Ergebnis.

\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

Aber wenn ich \uppercase verwende, erhalte ich eine Missing { inserted. \chapter{The First Chapter}Fehlermeldung.

\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

Ich verwende pdfTeX 3.14159265-2.6-1.40.19 (TeX Live 2018/W32TeX). Ich erhalte den gleichen Fehler, wenn ich MikTeX 2.9.7100 x64 verwende. Dies ist unter Windows 7.

Ich kann herausfinden, warum ich \uppercase nicht verwenden kann. Ich frage das, damit jeder, der dieses Problem hat, nicht viel Zeit mit der Fehlerbehebung verbringt.

Danke schön!

Mein ganzes Dokument ist

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

Antwort1

Latex bietet \MakeUppercase , weil \uppercasees viel Text zerstört, fast den gesamten Text, wenn Sie UTF-8 mit Nicht-ASCII-Buchstaben verwenden. Der spezifische Fehler hier ist jedoch

\uppercase\chaptertitlename

Die Klammern sind nicht optional, sie müssen

\uppercase{\chaptertitlename}

daher der von Ihnen angezeigte Fehler „Fehlende Klammer“.

Wie oben jedoch angemerkt wird dadurch die UTF-8-Kodierung aller Texte mit Akzentbuchstaben zerstört, da \uppercaseeinfach die ASCII-Tabelle für Großbuchstaben verwendet und auf die UTF-8-Bytes angewendet wird, was zu einem Ergebnis führt, das kein gültiges UTF-8 ist.

Antwort2

Versuche dies:

\documentclass{article}

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

\begin{document}

\uppercase\test

\end{document}

Die Ausgabe ist

Bildbeschreibung hier eingeben

Lustig? Ein bisschen.

Tatsache ist, dass es \uppercasesich um ein TeX-Grundelement handelt, daserfordert {danach. Zu diesem Zweck erweitert es Token danach; jedes \relaxToken oder Leerzeichen wird ignoriert und die Erweiterung wird fortgesetzt. Dieser Erweiterungsprozess endet, sobald ein weiteres nicht erweiterbares Token gefunden wird: Wenn dies der Fall ist {, fährt TeX mit der Ausführung fort \uppercase; andernfalls wird ein Fehler ausgegeben, {das Token wird eingefügt und erneut gelesen.

Dies sollte die lustige Ausgabe oben erklären: Die Erweiterung von \testergibt {abc}def, {abc}wird also von verarbeitet \uppercaseund wir erhalten „ABCdef“.

Im Gegenteil, \MakeUppercasees handelt sich um ein Makro mit einem Argument.

Vermeiden Sie das Weglassen von Klammern um Argumente. Und vermeiden Sie dies \uppercasebei LaTeX.

verwandte Informationen