我无法控制的精确高度\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
情况下为 :)。如果设置\fboxsep
为0pt
,则右侧的框的总高度为 ,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
、\makebox
和minipage
。
下面的代码为您提供了一个具有所需外部尺寸的规则框(包括规则宽度和间隔)
编辑:
而是使用图片环境来添加你的框,这样你就有更多的控制权
\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}