精美的章节标题

精美的章节标题

有人会构建以下样式的章节标题(用于较长的报告和书籍)吗?(虚线表示实线。)

      |
1.1   |   SECTION HEADING (IT WOULD EXTEND AT MOST TO ABOUT
      |   HERE, I.E., APPROX. 2/3 OF THE PAGE)
      |

以下参数应该是可调整的,以便人们可以根据自己的需要调整模板:

  • 线的粗细
  • 节标题文本上方和下方的行的长度
  • 节标题块上方和下方的空间
  • 行左右两侧的空格
  • 文本框换行前的长度。

编辑。有一个小问题:垂直线在文本上方和下方的延伸量不一样(当只有一行时),如下所示。

还:这没有包含在原始问题中,但如果可以选择对数字和章节标题使用单独的字体就更好了(例如,章节编号可以是粗体,但章节标题不能,就像我正在使用的章节标题一样)。

谢谢您的解决方案,看起来非常棒。

在此处输入图片描述

答案1

改良版

这是使用xkeyval包和键值方法:

在此处输入图片描述

代码(解释如下):

\documentclass{article}
\usepackage[explicit]{titlesec}
\usepackage{xkeyval}
\usepackage{tikz}
\usetikzlibrary{tikzmark,calc}
\usepackage{lipsum}

\newlength\LeftSep
\newlength\RightSep
\newlength\TitleWd
\newlength\VertLineWd
\newlength\SpaceBefore
\newlength\SpaceAfter
\newlength\RuleAddition
\newcommand\SectionFont{\normalfont\Large\bfseries}
\newsavebox\TitleBox
\newcounter{tmp}

\setlength\LeftSep{\marginparsep}
\setlength\RightSep{\marginparsep}
\setlength\TitleWd{0.6666\textwidth}
\setlength\VertLineWd{1pt}
\setlength\SpaceBefore{3.5ex plus 1ex minus .2ex}
\setlength\SpaceAfter{2.3ex plus .2ex}
\setlength\RuleAddition{0pt}

\makeatletter
\define@key{fctaylor}{leftsep}{\setlength\LeftSep{#1}}
\define@key{fctaylor}{rightsep}{\setlength\RightSep{#1}}
\define@key{fctaylor}{titlewidth}{\setlength\TitleWd{#1}}
\define@key{fctaylor}{verticalrulewidth}{\setlength\VertLineWd{#1}}
\define@key{fctaylor}{spacebefore}{\setlength\SpaceBefore{#1}}
\define@key{fctaylor}{spaceafter}{\setlength\SpaceAfter{#1}}
\define@key{fctaylor}{sectionfont}{\renewcommand\SectionFont{#1}}
\define@key{fctaylor}{ruleaddition}{\setlength\RuleAddition{#1}}

\newcommand\FCsectionformat[1][]{%
\setkeys{fctaylor}{#1}
\titleformat{\section}
  {\SectionFont}{}{0em}
  {%
    \parbox[t]{1em}{\thesection}\hspace{\LeftSep}%
    \stepcounter{tmp}%
    \tikz[remember picture]
      \draw[overlay,line width=\VertLineWd] 
        ([xshift=-\RightSep,yshift=\dimexpr\ht\strutbox+\RuleAddition\relax]pic cs:start-\thetmp) -- 
        ( $ ({pic cs:start-\thetmp}|-{pic cs:end-\thetmp}) + (-\RightSep,\dimexpr+\ht\strutbox-\baselineskip-\RuleAddition\relax)$ );%
    \hspace{\RightSep}% 
    \parbox[t]{\TitleWd}{%
      \SectionFont\raggedright\strut%
      \tikzmark{start-\thetmp}##1\tikzmark{end-\thetmp}\strut}%
  }
\titleformat{name=\section,numberless}
  {\SectionFont}{}{0em}
  {%
   \hspace*{\dimexpr1em+\LeftSep\relax}%
    \stepcounter{tmp}%
    \tikz[remember picture]
      \draw[overlay,line width=\VertLineWd] 
        ([xshift=-\RightSep,yshift=\dimexpr\ht\strutbox+\RuleAddition\relax]pic cs:start-\thetmp) -- 
        ( $ ({pic cs:start-\thetmp}|-{pic cs:end-\thetmp}) + (-\RightSep,\dimexpr+\ht\strutbox-\baselineskip-\RuleAddition\relax)$ );%
    \hspace{\RightSep}% 
    \parbox[t]{\TitleWd}{%
      \SectionFont\raggedright\strut%
      \tikzmark{start-\thetmp}##1\tikzmark{end-\thetmp}\strut}%
   }
}
\titlespacing*{\section}
  {0pt}{\SpaceBefore}{\SpaceAfter}
\titlespacing*{name=\section,numberless}
  {0pt}{\SpaceBefore}{\SpaceAfter}
\makeatother

\FCsectionformat

\begin{document}

\section{This is a test numbered section with a long title}
\lipsum[4]
\section*{This is a test unnumbered section with a long title}
\lipsum[4]

\section{This is a test numbered section}
\lipsum[4]
\section*{This is a test unnumbered section}
\lipsum[4]

\FCsectionformat[
  leftsep=30pt,
  rightsep=20pt,
  verticalrulewidth=4pt,
  titlewidth=\dimexpr\textwidth-2.5em-\RightSep-\LeftSep-\VertLineWd\relax,
  spacebefore=1cm,
  spaceafter=0.5cm,
  sectionfont=\normalfont\LARGE\itshape,
  ruleaddition=10pt
]
\section{This is a test numbered section with a long title}
\lipsum[4]
\section*{This is a test unnumbered section with a long title}
\lipsum[4]

\section{This is a test numbered section}
\lipsum[4]
\section*{This is a test unnumbered section}
\lipsum[4]

\end{document}

解释:

主命令是,\FCsectionformat它可以在文档中的任何位置(在序言中或在文档正文中)根据需要多次使用;该命令有一个可选参数,可以使用逗号分隔的<key>=<value>选项列表来更改标题属性。

可用的键有:

  • leftsep=<length>,数字和垂直规则之间的分隔;默认值:\marginparsep

  • rightsep=<length>,垂直规则和标题之间的分隔;默认值:\marginparsep

  • verticalrulewidth=<length>,垂直规则的粗细;默认值:1pt

  • titlewidth=<length>,排版标题的框的宽度;默认值:0.6666\textwidth

  • spacebefore=<length>,标题前的空格;默认:3.5ex plus 1ex minus .2ex

  • spaceafter==<length>,标题后的空格;默认:2.3ex plus .2ex

  • sectionfont=,标题的字体规范;默认值:\normalfont\LARGE\itshape

  • ruleaddition=<length>,在垂直规则上方和下方添加的额外长度;默认值:0pt

相关内容