这是我目前得到的 MWE:
\documentclass[a4paper,9pt,extrafontsizes,twoside,onecolumn,openright]{memoir}
\usepackage{xcolor}
\usepackage{calc}
\title{Main}
\def\titsize{\fontsize{60}{70}\selectfont}
\def\parttitsize{\fontsize{27}{46}\selectfont}
\def\stripheight(#1,#2){\vrule height #1 depth #2 width 0pt}
\renewcommand{\partname}{\thetitle}
\renewcommand{\partnamefont}{\color{white}\titsize\raggedright\MakeUppercase}
\renewcommand{\partnamenum}{}
\renewcommand{\partnumfont}{\color{white}\titsize\raggedright\MakeUppercase}
\renewcommand{\parttitlefont}{\color{white}\parttitsize\raggedright\MakeUppercase}
\renewcommand{\printpartname}{%
\hspace{-10pt}\colorbox{orange}{%
\parbox{\textwidth}{%
\hspace{10pt}%
\stripheight(55pt,10pt)\partnamefont\partname\quad\thepart%
\hspace{10pt}%
}
}%
}
\renewcommand{\printpartnum}{}
\renewcommand{\printparttitle}[1]{%
\hspace{-10pt}\colorbox{orange}{%
\parbox{\textwidth}{
\hspace{10pt}%
\parttitlefont{\stripheight(30pt,10pt)#1}%
\hspace{10pt}%
}%
}%
}
\begin{document}
\part{Long parttitle which wraps around}
\end{document}
这存在几个问题:
- 因为
\parbox{\textwidth}
盒子太宽了。我试过改成,\parbox{\width}
但没有用。 - 文本周围应该有一个大约 10 pt 的彩色“边距”。我使用
\partname
和\hspace{10pt}
一种\strut
我定义的 来实现这一点\stripheight
,但当有多行时,这种方法实际上不起作用,就像 中的情况一样\parttitle
。 - 线条应该彼此分开。这可以是白色的,因为我使用的是白色背景。所以也许可以像画一条白线一样简单,但我真的不知道从哪里开始。
答案1
你自己回答已经是一个好的开始。我之前不知道这个包soulpos
!这让事情变得简单多了!然后你可以使用以下代码(你的代码有一些小的简化):
\documentclass[a4paper,9pt,extrafontsizes]{memoir}
\usepackage{soulpos,xcolor,calc}
\def\titsize{\fontsize{60}{70}\selectfont}
\def\parttitsize{\fontsize{27}{44}\selectfont}
\ulposdef{\myhl}{%
\hskip-5mm\mbox{%
\textcolor{orange}{\rule[-.9ex]{\ulwidth+10mm}{3.5ex}}%
}\hskip5mm%
}
\renewcommand{\partnamefont}{\color{white}\titsize\raggedright\MakeUppercase}
\renewcommand{\partnumfont}{\color{white}\titsize\raggedright\MakeUppercase}
\renewcommand{\parttitlefont}{\color{white}\parttitsize\raggedright\MakeUppercase}
\renewcommand{\printpartname}{%
\partnamefont{\myhl{\thetitle\partnamenum\thepart}}%
}
\renewcommand{\printpartnum}{}
\renewcommand{\printparttitle}[1]{%
\parttitlefont{\myhl{#1}}%
}
\title{Main}
\begin{document}
\part{Long parttitle which wraps around twice}
\end{document}
得出的结果是:
我使用绝对长度(mm 而不是 em)作为填充,以便不同文本大小的左右填充相等。
答案2
这只是部分答案,我找不到办法做我想做的事情。
首先我尝试使用soul
包(在下面的 MWE 中注释掉)。它制作了一个漂亮的框,但我无法将框向左或向右延伸。(我可以使用\setuloverlap
,但由于值太高,它会打印一些字母,所以这不起作用)
然后我尝试使用soulpos
包。这使我能够将框延伸到第一行的左侧和最后一行的右侧,但我无法让它只制作更宽的框。
妇女权利委员会:
\documentclass[a4paper,9pt,extrafontsizes,twoside,onecolumn,openright]{memoir}
\usepackage{xcolor}
%\usepackage{soul}
\usepackage{soulpos}
\title{Main}
\def\titsize{\fontsize{60}{70}\selectfont}
\def\parttitsize{\fontsize{27}{44}\selectfont}
%\makeatletter
%\def\SOUL@hlpreamble{%
% \setul{}{3.5ex}%
% \dimen@\SOUL@ulthickness
% \dimen@i=-.8ex
% \advance\[email protected]\dimen@
% \edef\SOUL@uldepth{\the\dimen@i}%
% \let\SOUL@ulcolor\SOUL@hlcolor
% \SOUL@ulpreamble
%}
%\makeatother
\ulposdef{\myhl}[xoffset=.5em]{%
\mbox{%
\color{orange}%
\rule[-.9ex]{\ulwidth}{3.5ex}}}
\renewcommand{\partnamefont}{\color{white}\titsize\raggedright\MakeUppercase}
\renewcommand{\partnumfont}{\color{white}\titsize\raggedright\MakeUppercase}
\renewcommand{\parttitlefont}{\color{white}\parttitsize\raggedright\MakeUppercase}
\renewcommand{\printpartname}{%
% \setuloverlap{20pt}
% \sethlcolor{orange}%
\partnamefont{\myhl{\thetitle\partnamenum\thepart}}%
}
\renewcommand{\printpartnum}{}
\renewcommand{\printparttitle}[1]{%
% \setuloverlap{12pt}
% \sethlcolor{orange}%
\parttitlefont{\myhl{#1}}%
}
\begin{document}
\part{Long parttitle which wraps around twice}
\end{document}