使颜色框的宽度适合右边的文本

使颜色框的宽度适合右边的文本

我正在尝试重新创建类似这样的内容作为部分标题: 这

这是我目前得到的 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}

相关内容