titlesec 標籤欄位中出現 \uppercase 錯誤

titlesec 標籤欄位中出現 \uppercase 錯誤

我正在嘗試使用 titlesec 並格式化我的章節,以便標籤“章節”以全大寫呈現。如果我使用 \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如果您使用帶有非 ASCII 字母的 UTF-8,則會破壞大量文本,幾乎所有文本。然而這裡的具體錯誤是

\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;否則,它會引發錯誤,插入{並重新讀取該令牌。

這應該可以解釋上面有趣的輸出: , so\test中結果的擴展經過處理,我們得到“ABCdef”。{abc}def{abc}\uppercase

相反,\MakeUppercase它是一個只有一個參數的巨集。

避免省略參數周圍的大括號。並避免\uppercase使用 LaTeX。

相關內容