在 titleformat 中使用 llap 可防止换行

在 titleformat 中使用 llap 可防止换行

我希望将章节编号放在页边距中。我在这里找到了解决方案(定理名称/页边编号) 的使用有一个注意事项:当章节标题很长时,标题文本行不会中断。显式中断(使用\\\newline)也不起作用。

\documentclass{article}
\usepackage[explicit]{titlesec}
\usepackage[showframe=true]{geometry}

\titleformat{\section}%
            {\Large\sffamily\bfseries}% format
            {\llap{% label
               \thesection\hskip 12pt}#1}%
            {0pt}% horizontal sep
            {}% before

\begin{document}
 \section{A long long long long long long long long long long long long long long long title}
 Normal text.
\end{document}

我不完全理解它\llap的作用,但我更感兴趣的是将节号保留在页边距中但允许节标题换行的解决方案。使用 KOMA 类是可以的,尽管我知道这可能意味着不使用titlesec

答案1

你放#1错了地方:标题是最后的参数。如果没有explicit选项(通常是不必要的),代码应该是

\documentclass{article}
\usepackage{titlesec}
\usepackage[showframe=true]{geometry}

\titleformat{\section}%
  {\Large\sffamily\bfseries}% format
  {\makebox[0pt][r]{\thesection\hspace{12pt}}}% label
  {0pt}% horizontal sep
  {}% title

\begin{document}
 \section{A long long long long long long long long long long long long long long long title}
 Normal text.
\end{document}

如果你喜欢explicit,最后一行应该是

  {#1}% title

在此处输入图片描述

\llap如果您不知道它如何工作,请不要使用。首选\makebox[0pt][r]{...}:宽度为零的框,内容推到其右边距。

答案2

也许是这样的...\llap与问题无关。但我所做的改变是将#1其取出并放置在 中\parbox

\documentclass{article}
\usepackage[explicit]{titlesec}
\usepackage[showframe=true]{geometry}

\titleformat{\section}%
            {\Large\sffamily\bfseries}% format
            {\llap{% label
               \thesection\hskip 12pt}\parbox[t]{\textwidth}{#1}}%
            {0pt}% horizontal sep
            {}% before

\begin{document}
 \section{A long long long long long long long long long long long long long long long title}
 Normal text.
\end{document}

在此处输入图片描述

相关内容