表现

表现

我尝试将一个放入xtable宏中,但遇到了很多问题,这些问题在其他问题中有所记录。解决方法似乎是改为使用embeddedxtable。这似乎有效。

但是,我想知道当我使用 an 时还会发生什么embeddedxtable。我是否放弃了一些东西?我查看了源代码 ( tabl-xtb.mkvi) 并看到一条关于直接缓冲区更快(可能可以忽略不计)的评论,但我真的不够专业,无法真正理解是否还有其他我应该注意的权衡。

答案1

表现

它的一个小缺点embeddedxtable是它比正常环境稍慢,xtable但以下示例的结果是最坏的情况。对于正常使用,差异要小得多,因为花费了更多时间来计算单元格的宽度和高度,而这两种环境的宽度和高度是相同的。

\startbuffer[xtable]
    \startxtable
        \startxrow
            \startxcell
                Dummy
            \stopxcell
        \stopxrow
    \stopxtable
\stopbuffer

\startbuffer[embeddedxtable]
    \startembeddedxtable
        \startxrow
            \startxcell
                Dummy
            \stopxcell
        \stopxrow
    \stopembeddedxtable
\stopbuffer

\starttext

\testfeatureonce
  {10000}
  {\startnointerference
   \getbuffer[xtable]
   \stopnointerference}

\testfeatureonce
  {10000}
  {\startnointerference
   \getbuffer[embeddedxtable]
   \stopnointerference}

\stoptext

上述测试的结果可以在命令行中看到(以下是我的计算机上的结果):

system          > starting feature test (n=10000)
system          > 10000 feature tests done (18.584s)
system          > starting feature test (n=10000)
system          > 10000 feature tests done (29.971s)

限制

embeddedxtable您更感兴趣的是该环境与常规环境相比的局限性。

  1. 所有解释行尾的环境(例如\startlines\starttyping)在输出中仅产生一行文本。

  2. 并非所有符号都可以在代码块中使用(例如%)或产生意外结果(double #)。

\startbuffer[xtable]
    \startxtable
        \startxrow
            \startxcell
                \startlines
                First line
                Second line
                \stoplines
            \stopxcell
        \stopxrow
        \startxrow
            \startxcell
                \type
                    {%
                     #}
            \stopxcell
        \stopxrow
    \stopxtable
\stopbuffer

\startbuffer[embeddedxtable]
    \startembeddedxtable
        \startxrow
            \startxcell
                \startlines
                First line
                Second line
                \stoplines
            \stopxcell
        \stopxrow
        \startxrow
            \startxcell
                \type
                    {%
                     #}
            \stopxcell
        \stopxrow
    \stopembeddedxtable
\stopbuffer

\starttext

\getbuffer[xtable]

\getbuffer[embeddedxtable]

\stoptext

这是输出xtable

在此处输入图片描述

这就是你从embeddedxtable

在此处输入图片描述

相关内容