\hbox 的确切高度

\hbox 的确切高度

我无法控制的精确高度\hbox;这个例子有什么问题?

\documentclass{article}

\newcommand{\mybox}[2]{
\fbox{ \vbox to #1cm{
       \vfil\hbox to 1cm {\hfill #2 \hfill}
       \vfil}}}

\begin{document}

\renewcommand{\arraycolsep}{-0.1pt}
$$\begin{array}{cc}
\mybox{2}{a} & 
\begin{array}[b]{c}
\mybox{1}{b}\\[-0.65pt]
\mybox{1}{c}
\end{array}
\end{array}$$

\end{document}

我期望右边两个框的总高度与左边框的高度相同,即 2cm。但是,似乎有一个隐藏的高度被添加了。我该如何控制它?


更新

感谢您快速而详细的回复,这很有帮助!

然而,还存在另一个问题:

\documentclass{article}
\usepackage{color}
\usepackage{calc}
\newlength\mylenA
\newlength\mylenB


\newcommand{\myarray}[4][t]{
    \renewcommand{\arraycolsep}{-#3pt}
    \begin{array}[#1]{#2}#4\end{array}}

\newcommand\mybox[4][t]{%
    \setlength\mylenA{#3ex-2\fboxrule-2\fboxsep}%
    \setlength\mylenB{#3ex-2\fboxrule-2\fboxsep}%
    \fcolorbox{black}{#2}{\parbox[#1][\mylenA][c]{\mylenB}{\centering #4}}}

\begin{document}

\[\left(
\myarray{ll}{0.1}{

\myarray{ll}{0.15}{
   \mybox{yellow}{4}{A}&\mybox{green}{4}{B}\\[-5.15pt]
 & \mybox{blue}{4}{C}
}
& \mybox{red}{8}{D}
}
\right)\]

\end{document}

左括号和右括号太大了;有人看到哪里出了问题吗?

其次,有没有更优雅的方式来设置 arraycolsep 和换行符

\\[-5.15pt]

自动设置为正确值?我希望框在垂直和水平方向上尽可能靠近。

答案1

您没有考虑\fboxsep(框架框与其内容之间的间隔;默认值:)3pt和所用规则的“厚度”(\fboxrule默认0.4pt情况下为 :)。如果设置\fboxsep0pt,则右侧的框的总高度为 ,2cm+0.4pt而左侧的两个堆叠框的总高度为1cm+1cm+(4*0.2pt)=2cm+0.8pt(如果中间水平规则不重叠,但彼此紧挨着)或1cm+1cm+(3*0.2pt)=2cm+0.6pt(如果中间水平规则重叠)。

编辑:顺便说一下,$$...$$您应该使用,而不是使用 显示数学\[...\]

EDIT2:虽然我认为有时TikZ使用过度,但在这种特殊情况下,我认为尝试一下是明智的(它有助于准确放置彩色框):

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}

\begin{document}

\def\MyUnit{ex}
\begin{tikzpicture}[x=1\MyUnit,y=1\MyUnit]

\def\MyBox#1#2#3#4{\node[draw,fill=#1,minimum width=#2\MyUnit,minimum height=#2\MyUnit,align=center] at (#4) {#3};}

\matrix [matrix of nodes,left delimiter=(,right delimiter=)]
{
  \MyBox{yellow}{4}{A}{0,0}
  \MyBox{green}{4}{B}{4,0}
  \MyBox{blue}{4}{C}{4,-4}
  \MyBox{red}{8}{D}{10,-2}\\
};

\end{tikzpicture}

\end{document}

在此处输入图片描述

答案2

不要在 latex 中直接使用 Tex 基元\vbox\hbox,因为它们不是颜色“保存”。请使用 latex 等效项\parbox\makeboxminipage

下面的代码为您提供了一个具有所需外部尺寸的规则框(包括规则宽度和间隔)

编辑:

而是使用图片环境来添加你的框,这样你就有更多的控制权

\documentclass{article}
\usepackage{color}
\usepackage{calc}
\newlength\mylenA
\newlength\mylenB

\newcommand\mybox[4][t]{%
    \setlength\mylenA{#3\unitlength-2\fboxrule-2\fboxsep}%
    \setlength\mylenB{#3\unitlength-2\fboxrule-2\fboxsep}%
    \fcolorbox{black}{#2}{\parbox[#1][\mylenA][c]{\mylenB}{\centering #4}}}

\begin{document}

\setlength\unitlength{1ex}
$\left(
\begin{picture}(16,5)
    \put(0, 2){\mybox[c]{yellow}{4}{A}}
    \put(4, 2){\mybox[c]{green}{4}{B}}
    \put(4,-2){\mybox[c]{blue}{4}{C}}
    \put(8, 0){\mybox[c]{red}{8}{D}}
\end{picture}
\right)$
\end{document}

在此处输入图片描述

相关内容