我正在使用该类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}
这样,副标题就是强制参数之后的部分的额外可选参数,并且您可以在方括号中添加文本,就像我在示例的第二部分中所做的那样。