如何对齐章节标题和其副标题?

如何对齐章节标题和其副标题?

我正在使用该类extarticle,并且希望有一个\subtitle命令来为各个部分添加字幕。以下是我所期望的: 预期效果

这是我当前的解决方案,坦率地说相当丑陋:

\documentclass{extarticle}
\usepackage{titlesec}

\makeatletter
\newlength{\fsizept}
\setlength{\fsizept}{\f@size pt}
\makeatother

\newlength{\titleruleheight}
\setlength{\titleruleheight}{0.075\fsizept}

\titleformat{\section}{\Large\sffamily}
    {\thesection}{1em}{}[{\titlerule[\titleruleheight]}]
\newlength{\subtitleposfix}
\setlength{\subtitleposfix}{-2\baselineskip} %This should be linked with font size.
\newcommand\subtitle[1]{
    \vspace{\subtitleposfix}%
    \begin{flushright}%
        \emph{\emph{------}#1}%
    \end{flushright}\par}
\begin{document}
    \section{The title}
    \subtitle{The subtitle}
\end{document}

我发现很难正确对齐标题​​和副标题。2\baselineskip以上只是不准确的近似值。实际值应取决于字体大小和的配置titlerule(如您所见,这titlerule取决于给出的字体大小\fsizept)。

我应该补充一下,我对一些现有问题进行了搜索,例如 这个。但我还没有找到适合我的情况的满意解决方案。

无论如何,有没有更好的方法来实现这一目标?

答案1

以下是根据我的回答制作字幕的方法这里

\documentclass[10pt]{article}
\usepackage{titlesec}

\makeatletter
\newlength{\fsizept}
\newlength{\oldfsizept}
\newlength{\oldbaselineskip}
\newlength{\titleruleheight}
\newcommand{\readfsize}{%
\setlength{\fsizept}{\f@size pt}%
\setlength{\titleruleheight}{0.075\fsizept}%
}
\newcommand{\storeoldfsize}{%
\setlength{\oldfsizept}{\f@size pt}%
\setlength{\oldbaselineskip}{\baselineskip}%
\setlength{\titleruleheight}{0.075\oldfsizept}%
}
\makeatother






\newlength{\oldparskip}

\let\oldsection\section
\makeatletter
\def\section{%
\@ifstar{\StarredSection}{\NonStarredSection}%
}
\def\StarredSection{%
\@ifnextchar[
{\StarredSectionWith}%
{\StarredSectionWithout}%
}
\def\NonStarredSection{%
\@ifnextchar[
{\NonStarredSectionWith}%
{\NonStarredSectionWithout}%
}
\def\StarredSectionWith[#1]#2{%
\@ifnextchar[
{\StarredSectionWithWith[#1]#2}%
{\StarredSectionWithWithout[#1]{#2}}%
}
\def\StarredSectionWithout#1{%
\@ifnextchar[
{\StarredSectionWithoutWith#1}%
{\StarredSectionWithoutWithout{#1}}%
}
\def\NonStarredSectionWith[#1]#2{%
\@ifnextchar[
{\NonStarredSectionWithWith[#1]#2}%
{\NonStarredSectionWithWithout[#1]{#2}}%
}
\def\NonStarredSectionWithout#1{%
\@ifnextchar[
{\NonStarredSectionWithoutWith#1}%
{\NonStarredSectionWithoutWithout{#1}}%
}
\def\StarredSectionWithWith[#1]#2[#3]{%
\def\mysubtitle{#3}%
\oldsection*{#2}
}
\def\StarredSectionWithoutWith#1[#2]{%
\def\mysubtitle{}%
\def\mysubtitle{#2}%
\oldsection*{#1}
}
\def\StarredSectionWithWithout[#1]#2{%
\def\mysubtitle{}%
\oldsection*{#2}
}
\def\StarredSectionWithoutWithout#1{%
\def\mysubtitle{}%
\oldsection*{#1}
}
\def\NonStarredSectionWithWith[#1]#2[#3]{%
\def\mysubtitle{#2}%
\oldsection[#1]{#2}
}
\def\NonStarredSectionWithoutWith#1[#2]{%
\def\mysubtitle{#2}%
\oldsection{#1}%
}
\def\NonStarredSectionWithWithout[#1]#2{%
\def\mysubtitle{}%
\oldsection[#1]{#2}
}
\def\NonStarredSectionWithoutWithout#1{%
\def\mysubtitle{}%
\oldsection{#1}
}

\titleformat{\section}{\Large\sffamily}
    {\thesection\readfsize}{1em}{}[{\storeoldfsize\vspace{-\dimexpr\oldbaselineskip}{\hfill\small\emph{\ifx\mysubtitle\empty\relax\else------\fi\mysubtitle}}\vspace{-\dimexpr0.7\oldbaselineskip}\linebreak\readfsize\rule{\linewidth}{\titleruleheight}}]

\makeatother


\begin{document}
    \section{The title}[My subtitle]
    Test text

\section{Title}{}
[This is just a text in square brackets]

\end{document}

这样,副标题就是强制参数之后的部分的额外可选参数,并且您可以在方括号中添加文本,就像我在示例的第二部分中所做的那样。

在此处输入图片描述

相关内容