答案1
这种方法或许可行,使用\BL[<bullet>]{entry}
和 的嵌套来支撑\level{<row 1> \cr <row 2> ...}
。列宽由 定义\levelwidth
。
\documentclass{article}
\def\levelwidth{0.7in}
\newcommand\BL[2][$\bullet$]{#1\,\parbox[t]{\levelwidth}{\raggedright#2}}
\def\level#1{\unskip $\left\{\vcenter{\hbox{\shortstack{#1}}}\right.$\ignorespaces}
\begin{document}
\BL[]{Text here blah blah}
\level{
\BL{text text here here something}
\level{
\BL{number}\cr
\BL{other word}\cr
\strut
}
\cr
\BL{another text here}
\level{
\BL{something}\cr
\strut\cr
\strut
}
}
\end{document}
跟进
[注:更好的版本请见有没有更好的方法来设置这棵树?
在这里,我讨论了两个扩展:1)如果某些行采用不同数量的列,以及 2)如果列需要不同的宽度(我最近的编辑)。
如果有些条目的列数不同,我会引入\skipcol[<bullet>]{<column number>}
,它应该在\BL{}
最后一个已填充列的 之后使用(可能连续使用)。必须将列号指定为参数,因为不同的列现在可以具有不同的宽度。[<bullet>]
可能需要可选参数,因为不同的项目符号也具有不同的宽度。
列宽必须在定义中预先指定:(\levelwidth
最左边的列宽)、\levelwidthi
(最左边括号后的宽度)、\levelwidthii
(第二个括号后的宽度)\levelwidthiii
等,以罗马数字的形式。
\documentclass{article}
\newcounter{levelcount}
\def\levelwidth{0.7in}
\def\levelwidthi{1.7in}
\def\levelwidthii{.9in}
\def\levelwidthiii{.3in}
\newcommand\BL[2][$\bullet$]{#1\,\parbox[t]{%
\csname levelwidth\romannumeral\thelevelcount\endcsname}{\raggedright#2}}
\def\level#1{\stepcounter{levelcount}%
\unskip $\left\{\vcenter{\hbox{\shortstack{#1}}}\right.$%
\addtocounter{levelcount}{-1}\ignorespaces}
\newcommand\skipcol[2][$\bullet$]{\unskip\mbox{} %
\hphantom{$\left\{\hbox{#1\,\parbox[t]{%
\csname levelwidth\romannumeral#2\endcsname}{\mbox{}}}\right.$}%
\ignorespaces}
\begin{document}
\BL[]{Text here blah blah}
\level{
\BL{text text here here something}
\level{
\BL[$\spadesuit$]{number} \skipcol{3}\cr
\BL[$\spadesuit$]{other word}
\level{
\BL{A}\cr
\BL{B}
}
\cr
\strut
}
\cr
\BL{another text here}
\level{
\BL[$\spadesuit$]{something}\cr
\strut\cr
\strut
}\skipcol{3}
\cr
\BL{here is a 1-column entry, must use \textbackslash skipcol}
\skipcol[$\spadesuit$]{2}\skipcol{3}
}
\end{document}