
Я пытаюсь использовать titlesec и форматировать свои главы так, чтобы метка 'Chapter' отображалась ВСЕМИ ЗАГЛАВНЫМИ БУКВАМИ. Если я использую \MakeUppercase, я получаю желаемый результат.
\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
Но если я использую \uppercase, я получаю Missing { inserted. \chapter{The First Chapter}
ошибку.
\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
Я использую pdfTeX 3.14159265-2.6-1.40.19 (TeX Live 2018/W32TeX). Я получаю ту же ошибку, если использую MikTeX 2.9.7100 x64. Это на Windows 7.
Я могу понять, почему я не могу использовать \uppercase. Я спрашиваю это, чтобы если у кого-то еще возникнет такая проблема, они не тратили много времени на отладку.
Спасибо!
Мой весь документ
\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}
решение1
latex обеспечивает, \MakeUppercase
потому что \uppercase
уничтожит много текста, почти весь текст, если вы используете UTF-8 с не-ascii буквами. Однако конкретная ошибка здесь
\uppercase\chaptertitlename
Подтяжки не являются обязательными, они должны быть
\uppercase{\chaptertitlename}
отсюда и ошибка с отсутствующей скобкой, которую вы показываете.
Но, как отмечено выше, это нарушит кодировку UTF-8 любого текста, в котором используются буквы с диакритическими знаками, поскольку \uppercase
просто использует таблицу заглавных букв ASCII и применяет ее к байтам UTF-8, что приведет к созданию чего-то, что не является допустимым UTF-8.
решение2
Попробуй это:
\documentclass{article}
\newcommand{\test}{{abc}def}
\begin{document}
\uppercase\test
\end{document}
Выходной сигнал:
Смешно? Немного.
Дело в том, что \uppercase
это примитив TeX, которыйтребует {
после него. Для этого он расширяет токены после него; любой \relax
токен или пробел игнорируется, и расширение возобновляется. Этот процесс расширения заканчивается, как только обнаруживается другой нерасширяемый токен: если это {
, TeX переходит к выполнению \uppercase
; в противном случае он выдает ошибку, вставляет {
и перечитывает этот токен.
Это должно объяснить забавный вывод выше: расширение \test
приводит к результату {abc}def
, поэтому {abc}
обрабатывается \uppercase
и мы получаем «ABCdef».
Напротив, \MakeUppercase
это макрос с одним аргументом.
Избегайте пропуска скобок вокруг аргументов. И избегайте этого \uppercase
с LaTeX.