我正在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 upper
和after 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}