我想排版一个图形来表达某个量如何由其他量组成,并以表格形式图形化地描述它。我目前使用简单的表格格式完成了这项工作,并使用垂直线来表示下一列中的值属于上一列中的值。但我想用垂直左括号替换该垂直线。
当前代码如下:
\starttable[s0|cp(.2\textwidth)|cp(.2\textwidth)|cp(.2\textwidth)|cp(.25\textwidth)|]
\NC \NC \VL Variabel\\ kapitaal\\ 10 \VL Arbeidsloon v/d\\
productie-arbeiders\\ 10 \NC \AR
\NC \NC \VL \NC \NC \AR
\NC \NC \VL \NC \NC \AR
\NC \VL Nationaal\\ inkomen\\ 30 \VL \VL Winst van de\\ industriële
kapitalist\\ 10 \NC \AR
\NC \VL \VL \VL \NC \AR
\NC \VL \VL \VL Commerciële\\ winst\\ 3 \NC \AR
\NC Totaal\\ maatschappelijk\\ product\\ 90 \VL \VL Meerwaarde\\ 20 \VL
Rente\\ 2 \NC \AR
\NC \VL \VL \VL Grondrente\\ 5 \NC \AR
\NC \VL \NC \NC \NC \AR
\NC \VL Vervanging \\ v/h verbruikte \\ constante\\ kapitaal\\ 60 \NC \NC
\NC \AR
\stoptable
在更简单的形式中,我可以使用 mathcases,其中垂直左括号会扩展到所需的垂直大小,但我无法让它在嵌套形式中工作。有解决方法吗?
另一种方法是将表格中的垂直线替换为每条垂直线的额外列,并将左括号符号放在那里,适当地垂直降低和垂直拉伸。有办法吗?
该图片(以符号为标签)看起来像这样:
答案1
我建议使用 metapost 或 tikz 等图形包来绘制此类图表。Tikz 可能已经有一个不错的界面。以下是如何在 metapost 中绘制此类表格的基本示例。
\useMPlibrary[fen] % To get BasicBraceSymbol
\defineframed
[quantity]
[
align=middle,
width=0.25\textwidth,
frame=off,
]
\startMPinclusions
input boxes;
\stopMPinclusions
\starttext
\startMPcode
boxit.totaal("\quantity{Totaal\\ maatschappelijk\\ product\\ 90}");
boxit.nationaal("\quantity{Nationaal \\ inkomen \\ 30}");
boxit.kapitaal("\quantity{Vervanging \\ v/h verbruikte \\ constante\\ kapitaal\\ 60}");
newnumeric ux, uy;
totaal.c = origin;
xpart (nationaal.w - totaal.e) = EmWidth;
xpart nationaal.c = xpart kapitaal.c;
ypart (nationaal.s - totaal.n) = ypart (totaal.s - kapitaal.n) = 3LineHeight;
drawunboxed(totaal, nationaal, kapitaal);
boxit.brace(
image(fill BasicBraceSymbol(0) ysized (ypart (nationaal.n - kapitaal.s))));
brace.ne = nationaal.nw;
brace.dx = brace.dy=0;
drawunboxed(brace);
\stopMPcode
\stoptext
这使
您可以将其环绕 Metapost marco 来绘制树状结构。
答案2
我现在找到的解决方案(使用 Wolfgang Schuster 提供的代码)看起来像这样,几乎没问题。
代码:
\startuseMPgraphic{accolade}
z1 = (-233,0) ;
z2 = (-220,22) ;
z3 = (-155,211) ;
z4 = (-200,690) ;
z5 = (-142,1033) ;
z6 = (-97,1106) ;
z7 = (-71,1125) ;
z8 = (-61,1104) ;
z9 = (-80,1077) ;
z10 = (-108,1002) ;
z11 = (-129,666) ;
z12 = (-117,207) ;
z13 = (-197,19) ;
z14 = (-208,0) ;
z15 = (-197,-19) ;
z16 = (-117,-207) ;
z17 = (-129,-666) ;
z18 = (-108,-1026) ;
z19 = (-80,-1077) ;
z20 = (-61,-1104) ;
z21 = (-71,-1125) ;
z22 = (-97,-1106) ;
z23 = (-143,-1031) ;
z24 = (-199,-673) ;
z25 = (-155,-211) ;
z26 = (-220,-22) ;
fill z1 for i=2 upto 14: .. z[i] endfor & z14 for j=15 upto 26: .. z[j]
endfor .. z1 & cycle ;
\stopuseMPgraphic
\defineoverlay[rlbrace] [\rightaligned{\scale[height=\overlayheight]{\useMPgraphic{accolade}}}]
\starttext
\setupTABLE[frame=off,offset=1ex]
\setupTABLE[row][each][align={middle,lohi}]
\setupTABLE[c][1][width=.31\textwidth]
\setupTABLE[c][2][width=.21\textwidth]
\setupTABLE[c][3][width=.21\textwidth]
\setupTABLE[c][4][width=.27\textwidth]
\bTABLE
\bTR
\bTD[nr=6,background=rlbrace] Totaal\\ maatschappelijk\\ product\\ 90
\eTD
\bTD[nr=5,background=rlbrace] Nationaal\\ inkomen\\ 30
\eTD
\bTD[background=rlbrace] Variabel\\ kapitaal\\ 10
\eTD
\bTD Arbeidsloon v/d\\ productie-arbeiders\\ 10
\eTD
\eTR
\bTR
\bTD[nr=4,background=rlbrace] Meerwaarde\\ 20
\eTD
\bTD Winst van de\\ industriële kapitalist\\ 10
\eTD
\eTR
\bTR
\bTD Commerciële\\ winst\\ 3
\eTD
\eTR
\bTR
\bTD Rente\\ 2
\eTD
\eTR
\bTR
\bTD Grondrente\\ 5
\eTD
\eTR
\bTR
\bTD Vervanging \\ v/h verbruikte \\ constante\\ kapitaal\\ 60
\eTD
\bTD[nc=2]
\eTD
\eTR
\eTABLE
\stoptext
图片:
我唯一想要的是,括号不要填满整个高度,而是占一定比例(比如说:90%),同时保持表格尺寸相同(不影响行高),这样当一个括号位于另一个括号上方时,括号不会相互接触。
我怎样才能做到这一点?
A) 更改覆盖层的代码,以便在顶部和底部填充一些垂直空间,并且使括号符号稍微缩小一点(例如:顶部 5%,括号符号 90%,底部 5%,因此高度保持不变,只有括号符号看起来稍微小一点)?
或者
B)对表格布局进行一些改变,导致行之间有一点空间,或者每行在顶部和底部都有一些垂直空间(但这也可能会影响背景布局的高度,从而解决不了任何问题)?
C)第三个选择(但可能是丑陋的黑客)是在必要时添加额外的空白行。