自定义章节标题突出于左边距

自定义章节标题突出于左边距

基于此回答,我尝试定义自己的章节标题格式。这个想法是将章节标题右对齐(章节总是在奇数页开始),并用突出到右边距的规则在其下划线。当章节标题很短时,效果很好。但是,当它向左延伸很远时,章节编号有时会被推到左边距,而装订应该是在那里,所以这是大忌。我不太擅长这个,所以也许这是一个非常愚蠢的错误。提前感谢任何建议!

我的 MWE:

\documentclass{book}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{xcolor}
\usepackage{changepage}
\usepackage[calcwidth]{titlesec}
\usepackage{lipsum}

% Redefine chapter command
\newlength\mylen
\setlength\mylen{1cm}
\titleformat{\chapter}[hang]{\Huge\bfseries}{\textcolor{gray}{\thechapter}}{2pc}{\raggedleft}[\vspace{-20pt}%
   {%
      \begin{adjustwidth}{}{-\mylen}%
        \makebox[\linewidth][r]{\rule{\dimexpr\titlewidth+\mylen\relax}{1pt}}%
      \end{adjustwidth}%
   }%
  ]
\titlespacing{\chapter}{0pt}{0pt}{2cm}

\begin{document}

\chapter{A tremendously-long chapter title illustrating the bug I'm experiencing}

\lipsum[1]

\end{document}

在此处输入图片描述

答案1

这是一个可能的解决方案;基本思想是捕获标题(在的选项#1中),将其装箱在环境中,并通过使用条件测试比较标题的实际宽度()和最初为排版而保留的宽度( )来确定要使用的规则的长度():explicittitlesecvarwidth\ftitlewd+2pc\titlewd\titleboxwd=\textwidth-\mylen=\textwidth-3pc

\documentclass{book}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{xcolor}
\usepackage{varwidth}
\usepackage[calcwidth,explicit]{titlesec}
\usepackage{lipsum}

\newlength\mylen
\newsavebox\mybox
\newlength\titlewd
\newlength\ftitlewd
\newlength\titleboxwd
\setlength\mylen{3pc}
\setlength\titleboxwd{\dimexpr\textwidth-\mylen\relax}
\setlength\ftitlewd{\titleboxwd}

\newcommand\chapfont{\Huge\bfseries\raggedleft}

\titleformat{\chapter}[hang]
  {\chapfont\filleft}
  {}{0pc}
  {\parbox[t]{\mylen}{\textcolor{gray}{\thechapter}\hfill}%
    \begin{lrbox}{\mybox}%
    \begin{varwidth}[t]{\titleboxwd}%
      \chapfont#1%
    \end{varwidth}%
    \end{lrbox}%
    \settowidth\titlewd{\usebox\mybox}%
    \ifdim\titlewd<\titleboxwd%
          \global\setlength\ftitlewd{\titlewd}%
    \fi%
    \parbox[t]{\ftitlewd}{\usebox\mybox}%
  }
  [\vskip-1.4ex{\makebox[0pt][l]{%
    \hspace*{-\ftitlewd}\rule{\dimexpr\ftitlewd+2pc\relax}{1.5pt}}}%
  ]
\titleformat{name=\chapter,numberless}[hang]
  {\chapfont\filleft}
  {}{0pc}
  {%
    \begin{lrbox}{\mybox}%
    \begin{varwidth}[t]{\titleboxwd}%
      \chapfont#1%
    \end{varwidth}%
    \end{lrbox}%
    \settowidth\titlewd{\usebox\mybox}%
    \ifdim\titlewd<\titleboxwd%
          \global\setlength\ftitlewd{\titlewd}%
    \fi%
    \parbox[t]{\ftitlewd}{\usebox\mybox}%
  }
  [\vskip-1.4ex{\makebox[0pt][l]{%
    \hspace*{-\ftitlewd}\rule{\dimexpr\ftitlewd+2pc\relax}{1.5pt}}}%
  ]
\titlespacing*{\chapter}
  {1\mylen}{50pt}{40pt}

\begin{document}

\chapter*{An Unnumbered Chapter}
\lipsum[4]
\chapter{A tremendously Long Chapter Title Showing a Solution}
\lipsum[4]
\chapter{Short Chapter Title}
\lipsum[4]

\end{document}

生成的章节标题的一些图像:首先,未编号的章节(这将是 ToC、LoF、LoT 和参考书目的格式):

在此处输入图片描述

带有长标题的编号章节:

在此处输入图片描述

以及一个带有简称的编号章节:

在此处输入图片描述

请随意更改长度以满足您的需要。

就我个人而言(当然,这只是一个建议),按照要求的布局,章节号的位置会因章节而异,我不确定这是否是一个好的选择。也许你可以重新考虑一下。

以下变化将章节编号置于右边距之外,与规则突出的距离相同:

\documentclass{book}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{xcolor}
\usepackage{varwidth}
\usepackage[calcwidth,explicit]{titlesec}
\usepackage{lipsum}

\newsavebox\mybox

\newlength\mylen
\newlength\titlewd
\newlength\ftitlewd
\newlength\titleboxwd
\setlength\mylen{3pc}
\setlength\titleboxwd{\dimexpr\textwidth-\mylen\relax}
\setlength\ftitlewd{\titleboxwd}

\newcommand\chapfont{\Huge\bfseries\raggedleft}

\titleformat{\chapter}[hang]
  {\chapfont\filleft}
  {}{0pc}
  {%
    \begin{lrbox}{\mybox}%
    \begin{varwidth}[t]{\titleboxwd}%
      \chapfont#1%
    \end{varwidth}%
    \end{lrbox}%
    \settowidth\titlewd{\usebox\mybox}%
    \ifdim\titlewd<\titleboxwd%
          \global\setlength\ftitlewd{\titlewd}%
    \fi%
    \parbox[t]{\ftitlewd}{\usebox\mybox}%
    \makebox[0pt][l]{\parbox[t]{4pc}{\hfill\textcolor{gray}{\thechapter}}}%
  }
  [\vskip-1.4ex{\makebox[0pt][l]{%
    \hspace*{-\ftitlewd}\rule{\dimexpr\ftitlewd+4pc\relax}{1.5pt}}}%
  ]
\titleformat{name=\chapter,numberless}[hang]
  {\chapfont\filleft}
  {}{0pc}
  {%
    \begin{lrbox}{\mybox}%
    \begin{varwidth}[t]{\titleboxwd}%
      \chapfont#1%
    \end{varwidth}%
    \end{lrbox}%
    \settowidth\titlewd{\usebox\mybox}%
    \ifdim\titlewd<\titleboxwd%
          \global\setlength\ftitlewd{\titlewd}%
    \fi%
    \parbox[t]{\ftitlewd}{\usebox\mybox}%
  }
  [\vskip-1.4ex{\makebox[0pt][l]{%
    \hspace*{-\ftitlewd}\rule{\dimexpr\ftitlewd+4pc\relax}{1.5pt}}}%
  ]
\titlespacing*{\chapter}
  {1\mylen}{50pt}{40pt}

\begin{document}

\chapter*{An Unnumbered Chapter}
\lipsum[4]
\chapter{A tremendously Long Chapter Title Showing a Solution}
\lipsum[4]
\chapter{Short Chapter Title}
\lipsum[4]

\end{document}

相应图片:

在此处输入图片描述

在此处输入图片描述

在此处输入图片描述

相关内容