我想堆叠盒子。盒子的框架线应该完全位于彼此的顶部。
最初的问题
但是,当我定义两个框,让一个框从另一个框结束的地方开始(从空间上讲),线条不会重叠,而且我会得到一条粗线,因为两条细线相邻。我必须稍微移动一个框,这样它才能按照我想要的方式工作。请参阅下面的 MWE。
\documentclass[a4paper, 12pt, titlepage]{article}
\begin{document}
\setlength{\unitlength}{1cm}
\begin{picture}(6.6, 3.1)
\put(0.2,1.4){\framebox(2.4, 1){\shortstack{my bottom \\ is fat}}}
\put(0.2,0.7){\framebox(2.4, 0.7){}}
\end{picture}
\begin{picture}(6.6, 3.1)
\put(0.2,1.41){\framebox(2.4, 1){\shortstack{my bottom \\ is not fat}}}
\put(0.2,0.7){\framebox(2.4, 0.7){}}
\end{picture}
\end{document}
但是这个“解决方案”很糟糕,因为如果改变线条粗细,它就会崩溃。有没有办法说线条的中间应该正好位于框的边缘?
等等,还有更多
那么 MWE 中的 M 代表最小,对吧?那么为什么要费心为文档类添加所有这些参数呢?不应该无论如何,这里都很重要。因此,与第一个 MWE 相比,第二个 MWE(真正的 MWE)没有文档类的可选参数:
\documentclass{article}
\begin{document}
\setlength{\unitlength}{1cm}
\begin{picture}(6.6, 3.1)
\put(0.2,1.4){\framebox(2.4, 1){\shortstack{my bottom \\ is fat}}}
\put(0.2,0.7){\framebox(2.4, 0.7){}}
\end{picture}
\begin{picture}(6.6, 3.1)
\put(0.2,1.41){\framebox(2.4, 1){\shortstack{my bottom \\ is not fat}}}
\put(0.2,0.7){\framebox(2.4, 0.7){}}
\end{picture}
\end{document}
令我惊讶的是,这导致了肥胖程度的一点变化:
这是怎么回事?在什么条件下线条会排成一行?什么影响了这一点?我如何预测图片会是什么样子?我什么时候需要纠正框的位置,什么时候不需要?
答案1
如果只需要堆叠两个框,则tcolorbox
可以使用。默认情况下,所有 tcolorbox 都有上部和下部。
\documentclass{article}
\usepackage[most]{tcolorbox}
\tcbset{nobeforeafter}
\newtcolorbox{mybox}[1][]{
enhanced,
notitle,
colframe=black,
colback=white,
segmentation style={solid,line width=0.5mm},
sharp corners,
width=3cm,
split=0.5,
#1}
\begin{document}
\begin{mybox}
Upper part
\tcblower
Lower part
\end{mybox}
\begin{mybox}[height=4cm, valign=center]
Upper part
\tcblower
Lower part
\end{mybox}
\begin{mybox}[height=6cm, width=4cm, halign=center, valign lower=bottom]
Upper part
\tcblower
Lower part
\end{mybox}
\end{document}
如果需要两个以上的箱子,一个可能的解决方案可能是TiKZ splited rectangle
,尽管在这种情况下控制空部件高度更加困难。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes.multipart, positioning}
\begin{document}
\begin{tikzpicture}
\node[rectangle split, rectangle split parts=2, draw, text width=2cm, align=center] (a) {Upper\nodepart{two}Lower};
\node[rectangle split, rectangle split parts=3, draw, text width=2cm, align=center, right = of a] (b) {Upper\nodepart{two}\rule{0pt}{2cm}\nodepart{three}};
\node[rectangle split, rectangle split parts=5, draw, text width=2cm, align=center, right=of b] (c) {Upper};
\end{tikzpicture}
\end{document}