包 titlesec 错误:在每个 \section{} 行以水平模式输入

包 titlesec 错误:在每个 \section{} 行以水平模式输入

我有红色错误项目符号包 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}那个不会产生任何作用(除非您还为标题设置了不同的颜色,这会增加一层强调)。

在此处输入图片描述

相关内容