gypq 改变了 tcolorbox 的高度

gypq 改变了 tcolorbox 的高度

我正在tcolorbox创建一个带有文本的框。不幸的是,如果我使用诸如 等字符y g p q,框的高度会比没有时略大:

\documentclass{article}
\usepackage{tcolorbox}
\usepackage{multicol}
\begin{document}
    \begin{multicols}{2}
        \begin{tcolorbox}
            Hello
        \end{tcolorbox}
        \columnbreak
        \begin{tcolorbox}
            Bye
        \end{tcolorbox}
    \end{multicols}
\end{document}

我怎样才能独立地实现这些字符相同的框高度?

答案1

你需要一个\phantom能带来不同效果的角色。我选择在每个框中放置相同的幻影(一个高大的角色和一个深沉的角色):

\documentclass{article}
\usepackage{tcolorbox}
\usepackage{multicol}
\begin{document}
    \begin{multicols}{2}
        \begin{tcolorbox}
            Hello\phantom{Hy}
        \end{tcolorbox}
        \columnbreak
        \begin{tcolorbox}
            Bye\phantom{Hy}
        \end{tcolorbox}
    \end{multicols}
\end{document}

上述代码的输出

严格来说,您可以使用\vphantom进行垂直校正,在这种情况下可能应该这样做。更好的方法是\strut,特别是如果您想定义自己的新框:

\documentclass{article}
\usepackage{tcolorbox}
\newtcolorbox{oneliner}{fontupper=\strut}
\usepackage{multicol}
\begin{document}
    \begin{multicols}{2}
        \begin{oneliner}
            Hello
        \end{oneliner}
        \columnbreak
        \begin{oneliner}
            Bye
        \end{oneliner}
    \end{multicols}
\end{document}

第 15 页和第 29 页tcolorbox 手册解释如何制作自己的框,以及各种选项的含义。 在新的框定义\vphantom{y}\strut不起作用——幻影设置在一行上,真实文本在下面。

答案2

另一种选择是equal height group。来自同一组的所有框将具有相似的高度(经过两次编译),无论它们是否在同一行都没有关系。

\documentclass{article}
\usepackage{tcolorbox}
\usepackage{multicol}
\begin{document}
    \begin{multicols}{2}
        \begin{tcolorbox}[equal height group=A]
            Hello
        \end{tcolorbox}
        \columnbreak
        \begin{tcolorbox}[equal height group=A]
            Bye
        \end{tcolorbox}
    \end{multicols}
    \begin{multicols}{2}
        \begin{tcolorbox}[equal height group=A]
            aeo
        \end{tcolorbox}
        \columnbreak
        \begin{tcolorbox}
            aeo
        \end{tcolorbox}
    \end{multicols}
\end{document}

在此处输入图片描述

答案3

另一个解决方法是使用\strut

\documentclass{article}
\usepackage{tcolorbox}
\usepackage{multicol}
\begin{document}
    \begin{multicols}{2}
        \begin{tcolorbox}
            \strut Hello
        \end{tcolorbox}
        \columnbreak
        \begin{tcolorbox}
            \strut Bye
        \end{tcolorbox}
    \end{multicols}
\end{document}

答案4

也许回答得太晚了,而且毫无用处,但对于多行文本(段落),也可以使用选项tcolorbox/after upperafter lower(垂直,即零宽度)幻像文本。对于添加的幻像文本,减去文本深度(strutbox),以便与框底线具有相同的间隙。

这使得能够实际控制箱底的垂直跳跃。

\documentclass[12pt]{article}
\usepackage{tcolorbox}
\usepackage{geometry}
\usepackage{lipsum}

\geometry{%
  a4paper, twoside,
  top=27mm, bottom=27mm, inner=20mm, outer=20mm,
  ignorehead, ignorefoot, includemp,
  marginparwidth=52mm, marginparsep=8mm,
  headsep=7mm, headheight=12.2pt, footskip=14mm, showframe
}

\newcommand{\tcbphantom}{\vspace*{-\dp\strutbox}\vphantom{Hg}}

\tcbset{tcbphantom/.style={
    boxsep=0pt, boxrule=2pt,
    top=4pt, bottom=8pt,
    left=4pt, right=4pt,
    after upper=\tcbphantom
  }
}

\pagestyle{empty}

\begin{document}
  \begin{tcolorbox}[tcbphantom]
    \lipsum[1] % <-- Last line with "letters having depth"
  \end{tcolorbox}
  \begin{tcolorbox}[tcbphantom]
    \lipsum[2] % <-- Last line without "letters having depth"
  \end{tcolorbox}
\end{document}

在此处输入图片描述

相关内容