我试图制作一个带有大写字体和颜色的节样式。但是当我使用\MakeUppercase
像
\makeatletter
\renewcommand{\@seccntformat}[1]{{\textcolor{purple}{\csname the#1\endcsname}\hspace{1em}}}
\renewcommand{\section}{\@startsection{section}{1}{\z@}
{-4ex \@plus -1ex \@minus -.4ex}
{1ex \@plus.2ex }
{\normalfont\large\sffamily\bfseries\MakeUppercase\color{purple}}}
显示以下错误
Argument of \@declaredcolor has an extra }. \section{}
答案1
如果你交换顺序\MakeUppercase
,\color{purple}
它就可以工作。在内部,分段命令(大致)执行以下操作:
<formatting>{\@seccntformat{<number>} <title>}
其中的<formatting>
最后一个参数是章节编号,而您猜对了,是标题:)\@startsection
<number>
<title>
如果我们按照你的建议去做,\section{hello}
就会变成:
\normalfont\large\sffamily\bfseries\MakeUppercase\color{purple}{1 hello}
(\@seccntformat
现在并不重要)。尝试运行上述代码,您将看到相同的错误。发生这种情况是因为\MakeUppercase
grabs\color
作为参数,当\color
尝试执行其操作时,它找不到它正在寻找的机器人颜色名称,因此会出现混乱。但如果您交换顺序,它就会起作用 :)
\normalfont\large\sffamily\bfseries\color{purple}\MakeUppercase{1 hello}
但现在你会收到另一个错误:
! Package xcolor Error: Undefined color `PURPLE'.
但为什么?!还记得\@seccntformat
当时吗?你有:
<formatting>{\@seccntformat{<number>} <title>}
当<formatting>
包含\MakeUppercase
且\@seccntformat
包含时\textcolor{purple}{<number>}
,则有:
\MakeUppercase{\textcolor{purple}{<number>} <title>}
将在执行\MakeUppercase
之前\textcolor
执行:
{\textcolor{PURPLE}{<NUMBER>} <TITLE>}
是的,还有数字 :)
但你不需要那个。计数器在 之后使用\color{purple}
,因此它已经是彩色的。你可以删除它,数字也会变成紫色。如果你把它去掉,你的 的定义\@seccntformat
与 LaTeX 的定义相同,所以你可以把它全部删除。
完成所有这些后,输出为:
梅威瑟:
\documentclass{article}
\usepackage{xcolor}
\makeatletter
% \renewcommand{\@seccntformat}[1]{\csname the#1\endcsname\hspace{1em}} == default :)
\renewcommand{\section}{\@startsection{section}{1}{\z@}
{-4ex \@plus -1ex \@minus -.4ex}
{1ex \@plus.2ex }
{\normalfont\large\sffamily\bfseries\color{purple}\MakeUppercase}}
\makeatother
\begin{document}
\pagestyle{empty}
\section{Hello}
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
\end{document}