
私は 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 上です。
\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
ラテックスが提供するの\MakeUppercase
は\uppercase
、多くのテキスト、非ASCII文字を含むUTF-8を使用している場合はほぼすべてのテキストを破壊するためです。ただし、ここでの具体的なエラーは次のとおりです。
\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
、 は{abc}
によって処理され\uppercase
、「ABCdef」が得られます。
逆に、\MakeUppercase
は引数が 1 つあるマクロです。
引数を囲む中括弧を省略しないでください。LaTeX\uppercase
でも省略しないでください。