titlesec의 레이블 필드에 \대문자 오류가 있습니다.

titlesec의 레이블 필드에 \대문자 오류가 있습니다.

titlesec을 사용하고 'Chapter' 라벨이 ALLCAPS로 렌더링되도록 챕터의 형식을 지정하려고 합니다. \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에 있습니다.

왜 대문자를 사용할 수 없는지 알아낼 수 있습니다. 다른 사람이 이 문제를 겪고 있다면 디버깅하는 데 많은 시간을 소비하지 않기 위해 이렇게 묻습니다.

감사합니다!

내 전체 문서는

\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는 ASCII가 아닌 문자로 UTF-8을 사용하는 경우 많은 텍스트, 거의 모든 텍스트를 파괴하기 \MakeUppercase 때문에 제공합니다. \uppercase그러나 여기서 구체적인 오류는 다음과 같습니다.

\uppercase\chaptertitlename

교정장치는 선택사항이 아니고 필수입니다

\uppercase{\chaptertitlename}

따라서 표시되는 중괄호 누락 오류입니다.

그러나 위에서 언급한 것처럼 단순히 ASCII 대문자 테이블을 사용하고 이를 UTF-8 바이트에 적용하므로 악센트 문자를 사용하는 텍스트의 UTF-8 인코딩이 중단되어 \uppercase유효한 UTF-8이 아닌 항목이 생성됩니다.

답변2

이 시도:

\documentclass{article}

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

\begin{document}

\uppercase\test

\end{document}

출력은 다음과 같습니다

여기에 이미지 설명을 입력하세요

재미있는? 약간.

사실은\uppercase TeX 프리미티브입니다.필요하다 {그 후에. 이를 위해 이후에 토큰을 확장합니다. 모든 \relax토큰이나 공간 토큰은 무시되고 확장이 재개됩니다. 이 확장 프로세스는 확장할 수 없는 또 다른 토큰이 발견되자마자 종료됩니다. 만약 그렇다면 {TeX는 실행을 진행합니다 \uppercase. 그렇지 않으면 오류가 발생하고 {해당 토큰을 삽입하고 다시 읽습니다.

\test이것은 위의 재미있는 출력을 설명해야 합니다. 결과 의 확장은 에 의해 처리되고 {abc}def" ABCdef"를 얻습니다.{abc}\uppercase

반대로 는 \MakeUppercase인수가 하나인 매크로입니다.

인수 주위에 중괄호를 생략하지 마세요. 그리고 \uppercaseLaTeX는 피하세요.

관련 정보