这在 ConTeXt 中很容易实现... :(
我已经尝试这种布局一段时间了,但似乎没有什么能像我预期的那样发挥作用。
我有一个自定义章节标题,用 创建titlesec
。我想让章节标题文本和一个很大的章节编号垂直居中,即使章节标题很短,只占一行。
目前,它们与基线对齐,这是意料之中的。但我找不到“强制”垂直对齐的方法……我不知道是否应该尝试一下tikz
,也许吧。
整个组(标题 + 数字)向右对齐,并由具有某些特征的线分隔(与数字相同的高度、一定的宽度和颜色)。我尝试过 tabular、tabu、parbox……可能很容易,但我找不到可行的解决方案。我不知道我的一些代码是否搞砸了,所以我至少包含了字体(Erewhon)和任意大小定义,以及我创建的一些宏,也许有些错误我没有看到。
任何帮助将不胜感激。
这是我的 MWE:
\documentclass{book}
\usepackage[clearempty,newlinetospace,raggedright,small,explicit]{titlesec}
\usepackage{pbox}
\usepackage{lipsum}
\usepackage{erewhon}
\usepackage{microtype}
\usepackage[usenames,dvipsnames]{xcolor}
\definecolor{gris50}{gray}{0.5}
\newcommand{\size}[2]{{\fontsize{#1}{0}\selectfont #2}}
\newcommand{\sizeline}[3]{{\fontsize{#1}{#2}\selectfont #3}}
\newenvironment{sizepar}[2]
{\par\fontsize{#1}{#2}\selectfont}
{\par}
\newcommand{\bigvertical}[1][black]{\kern12pt\textcolor{#1}{\rule[0pt]{1pt}{\fontcharht\font`M}}\kern10pt}
\titleformat{\chapter}[block]{\bfseries}{}{0pt}{%
\filleft%
\pbox[b][][b]{.6\textwidth}{%
\raggedleft%
\sizeline{14}{16}{\textls[30]{#1}}%
}%
\sizeline{40}{40}{\bigvertical[gris50]\textcolor{gris50}{\thechapter}}%
}
\titleformat{\section}[block]{\bfseries}{}{0pt}{\textls[20]{\sizeline{11.2}{13}{#1}}}
\titleformat{\subsection}[block]{\bfseries\slshape}{}{0pt}{\textls[20]{\sizeline{10.2}{13}{#1}}}
\titlespacing*{\chapter}{0pt}{0pt}{122pt}
\begin{document}
\chapter{A really long chapter title with several words}
\lipsum[1-3]
\chapter{A short title}
\lipsum[1-3]
\end{document}
答案1
tabular
您可以使用和获得垂直居中\parbox
。此外,\vrule
自行计算所需的高度和深度。
\documentclass{book}
\usepackage[clearempty,newlinetospace,raggedright,small,explicit]{titlesec}
\usepackage{pbox}
\usepackage{lipsum}
\usepackage{erewhon}
\usepackage{microtype}
\usepackage[usenames,dvipsnames]{xcolor}
\definecolor{gris50}{gray}{0.5}
\newcommand{\size}[2]{{\fontsize{#1}{0}\selectfont #2}}
\newcommand{\sizeline}[3]{{\fontsize{#1}{#2}\selectfont #3}}
\newenvironment{sizepar}[2]
{\par\fontsize{#1}{#2}\selectfont}
{\par}
\newcommand{\printchapternumber}{%
\begingroup\renewcommand{\arraystretch}{0}%
\begin{tabular}{@{}c@{}}\size{40}{\thechapter}\end{tabular}%
\endgroup
}
\titleformat{\chapter}[block]
{\bfseries\filleft}
{}
{0pt}
{%
\parbox{.6\textwidth}{\raggedleft\fontsize{14}{16}\selectfont#1}%
\hspace{6pt}%
\color{gris50}\vrule
\hspace{6pt}%
\printchapternumber
}
\titleformat{\section}[block]{\bfseries}{}{0pt}{\textls[20]{\sizeline{11.2}{13}{#1}}}
\titleformat{\subsection}[block]{\bfseries\slshape}{}{0pt}{\textls[20]{\sizeline{10.2}{13}{#1}}}
\titlespacing*{\chapter}{0pt}{0pt}{122pt}
\begin{document}
\begingroup\let\clearpage\relax\let\cleardoublepage\relax
\chapter{A really long chapter title with several words}
\chapter{A short title}
\chapter{A really long long long long long chapter title with several several several words}
\endgroup
\end{document}
我重新定义了文档主体中的\clearpage
和,\cleardoublepage
只是为了将标题放在同一页面上,以便于轻松比较它们。
最后说明:我删除了\textls
。谁要是把字母空格小写,那他也会偷羊。