如何在 Context 中绘制此图?

如何在 Context 中绘制此图?

我想排版一个图形来表达某个量如何由其他量组成,并以表格形式图形化地描述它。我目前使用简单的表格格式完成了这项工作,并使用垂直线来表示下一列中的值属于上一列中的值。但我想用垂直左括号替换该垂直线。

当前代码如下:

\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)第三个选择(但可能是丑陋的黑客)是在必要时添加额外的空白行。

相关内容