数组编程语言有装箱的概念。J 就是这样一种语言。装箱可以包含任何东西,也可以不包含任何东西。最重要的是,由于数组语言的设计,装箱是从外向内的,并且也是以这种方式直观呈现的,正如在 提供的环境中所见fancyvbr
,其中放置了 jconsole 从 的输入得到的结果<(<1),<<2
。
对于非嵌套示例,例如空列表和 1,\fbox{}
就足够了。
然而,对于(一个带有 1 的盒子)和(一个带有(一个带有 2 的盒子)的盒子)的盒子,这两个盒子在第 1 级的框架并不对齐,因为它们是从内向外构建的,也就是说,它们是增大而不是缩小的。
我在 TeX SE 中寻找类似的难题,在 CTAN 中寻找装箱和嵌套包,但没有找到相关的东西。如果不是因为没有明确的 ,使用\hline
s 和 nested就可以了。我可能错过了一些非常简单的东西,但我预计会有大量的 TiKZ 代码,并不简单。\tabular
\vspace{...}
这是我的练习表,即 MWE:
\documentclass{article}
\usepackage{microtype,calc}
\usepackage{fancyvrb}
\setlength{\fboxsep}{1pt}
\setlength{\fboxrule}{0.20pt}
\setlength{\dashlength}{3pt}
\setlength{\hangindent}{0pt}
\setlength{\parindent}{0pt}
\AtBeginDocument{
\newlength{\myht} \settoheight{\myht}{0}
\newlength{\mydp} \settodepth{\mydp}{0}
\newlength{\mylen} \setlength{\mylen}{\dimexpr\baselineskip-\myht-\mydp-1.1pt\relax}
\def\ebox{\fbox{\hbox to 0.25ex{\vbox to \mylen{}}}}
}
\usepackage[raster]{tcolorbox}
\begin{document}
\fbox{\ebox\fbox{\fbox{1}}}
\fbox{\fbox{1}\fbox{\fbox{2}}}
\fbox{ \begin{tabular}{|c|c|}\hline 1 & \fbox{ \hbox to 0.2ex {\vbox to 5ex{}}2 }\\ \hline\end{tabular} }
\begin{Verbatim}
┌───────┐
│┌─┬───┐│
││1│┌─┐││
││ ││2│││
││ │└─┘││
│└─┴───┘│
└───────┘
\end{Verbatim}
{
\setlength{\fboxsep}{1ex}
\begin{tabular}{|c|c|}\hline
1 & \fbox{2} \\
\hline\end{tabular}
}
\fbox{\fbox{\ebox}\fbox{1 2}}\\
\fbox{%
\begin{minipage}{2cm}\begin{tcbitemize}[size=fbox,sharp corners,colframe=black,colback=white,raster equal height,raster force size=false,raster equal skip=0pt,raster column skip=2mm]%
\tcbitem 1 2 3%
\tcbitem 1 2%
\end{tcbitemize}\end{minipage}%
}
\end{document}
编辑:我想重现 Verbatim 示例。框的内容是否垂直居中并不重要,只要同一级别的框具有相同基线的框架,即它们的深度和高度相同即可。
答案1
也许是这个??
\documentclass{article}
\usepackage{listofitems}
\newlength\maxht
\newlength\maxdp
\newcommand\cbox[1]{%
\readlist*\mylist{#1}%
\maxht=0pt
\maxdp=0pt
\foreachitem\z\in\mylist[]{%
\setbox0=\hbox{\z}%
\ifdim\ht0>\maxht\relax\maxht=\ht0\fi
\ifdim\dp0>\maxdp\relax\maxdp=\dp0\fi
}
\foreachitem\z\in\mylist[]{%
\fbox{\z\rule[-\maxdp]{0pt}{\dimexpr\maxdp+\maxht}}%
\kern-\fboxrule
}
}
\parskip1em
\begin{document}
\cbox{1,2}
\cbox{1,\cbox{2}}
\cbox{\cbox{1,\cbox{2}}}
\cbox{\cbox{\cbox{\cbox{1,2},3,4}, 5}}
\end{document}
答案2
这显示了如何匹配保存框的高度、宽度或两者。
\documentclass{article}
\parskip=1ex
\newcommand{\matchbox}[2]% #1 = box register, #2 = contents
{\makebox[\wd#1]{\raisebox{0pt}[\ht#1][\dp#1]{#2}}}
\begin{document}
\sbox0{\fbox{A}}%
\fbox{\usebox0}\fbox{\raisebox{0pt}[\ht0][\dp0]{B}}
\fbox{\usebox0}\fbox{\makebox[\wd0]{B}}
\fbox{\usebox0}\fbox{\matchbox{0}{B}}
\sbox1{\fbox{\usebox0}\fbox{\matchbox{0}{B}}}%
\sbox2{\fbox{\usebox1}\fbox{\matchbox{1}{C}}}%
\fbox{\usebox2}\fbox{\matchbox{2}{D}}
\end{document}
答案3
这不是一个很好的答案,但通过调整框架宽度和分离长度,隐形盒子就可以出售:
\documentclass{article}
\setlength{\fboxrule}{0.2pt}
\setlength{\fboxsep}{1.0pt}
\newcommand{\FBOX}[1]{{\fbox{\setlength{\fboxsep}{\dimexpr\fboxsep+\fboxrule\relax}\setlength{\fboxrule}{0pt}\fbox{#1}}}}
\newcommand{\nbox}[1]{{\fbox{\setlength{\fboxsep}{\dimexpr\fboxsep+\fboxrule\relax}\setlength{\fboxrule}{0pt}#1}}}
\begin{document}
\fbox{\fbox{1}\fbox{\fbox{2}}}
\nbox{\fbox{1}}\fbox{\fbox{2}}
\FBOX{1}\fbox{\fbox{2}}
\end{document}
编辑:增加fboxsep
即将消失的部分fboxrule
有助于缓解差异,但相邻框之间仍然存在可见的距离,这个距离非常小,比如 1 个像素。