我有红色错误项目符号包 titlesec 错误:以水平模式进入在每个 \section{} 指令行
一开始我有以下命令,这导致了错误
\titleformat{\section}{
\vspace{-4pt}\scshape\raggedright\large\textbf
}{}{0em}{}[\color{black}\titlerule \vspace{-5pt}]
在阅读了这里的一些帖子后,我改为使用标题间距,如下所示,但错误仍然存在。
\titleformat{\section}{
\scshape\raggedright\large\textbf
}{}{0em}{}[\color{black}\titlerule]
\titlespacing{\section}{-0.5cm}{*3.5}{*1.5}
我尝试了很久,也没有找到解决方案,它不允许生成 pdf 文件。
你能帮忙解决这个问题吗?
谢谢
答案1
问题是您尝试\textbf
在 中使用\titleformat
,但\textbf
是一个带有参数的命令,它不是用于将字体切换为粗体的不带参数的命令。您应该\bfseries
在那里使用。
以下示例编译时没有错误。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{titlesec}
\usepackage{xcolor}
\titleformat{\section}{
\vspace{-4pt}\scshape\raggedright\large\bfseries
}{}{0em}{}[\color{black}\titlerule \vspace{-5pt}]
\begin{document}
\section{A section}
\end{document}
答案2
字体更改命令有两种:
- 动作(例如,,
\textbf
)\textsc
; - 声明(例如
\bfseries
)\scshape
。
前一种类型的命令带有参数,而后一种类型的命令则不带有参数。
因此\textbf{foo}
将“foo”排版为粗体(实际上,它将粗体属性添加到当前属性中),但对周围的文本没有任何影响。
相反,\bfseries
告诉 LaTeX,从现在起,全部文本将以粗体显示(除其他字体属性外)。但是,效果是按组范围确定的,因此它实际上不会永远持续下去。
当排版章节标题时,LaTeX 总是位于一个组内,因为标题通常会设置特殊的字体属性,而我们不希望这些属性永远持续下去。
因此,在参数中选择字体属性\titleformat
是安全的。但您使用的命令必须是声明,而不是动作。
因此\textbf
,您发现的 不会导致低级错误,因为此命令会主动查找其参数并使用一些随机的意外标记。您应该使用\bfseries
,就像使用 一样\scshape
。
请注意,大多数字体都没有粗体小写字母,但即使你最喜欢的字体有,你也会加倍强调标题。一层强调就足够了,所以你应该在粗体和小写字母之间做出选择,而不是两者兼而有之。但这是一个风格决定,我留给你去决定。顺便说一句,标题规则增加了另一层强调,所以你最终会得到三。
此外,间距应使用 来设置\titlespacing
,而不是使用 中的显式垂直间距命令\titleformat
。使用您建议的代码,您可以添加第四层强调,即章节标题固定在左边距。
\documentclass[a4paper]{article}
\usepackage{titlesec}
\usepackage{libertinus} % for boldface small caps
\usepackage{lipsum} % for context
\titleformat{\section}
{\filright\large\scshape\bfseries}
{\thesection.\ }
{0em}
{}
[\titlerule]
\titlespacing{\section}{-0.5cm}{*3.5}{*1.5}
\begin{document}
\lipsum[1][1-4]
\section{Some section title}
\lipsum[2-3]
\end{document}
请注意\filright
,而\raggedright
不是,并且省略\color{black}
那个不会产生任何作用(除非您还为标题设置了不同的颜色,这会增加一层强调)。