我想为几个源代码块创建一个表格。在 LaTeX 中,我会这样做
\hline
\begin{lstlisting}
abc;
def;
\end{lstlisting}
\tabularnewline
有没有办法在 ConTeXt 中实现这样的功能?我尝试过\starttyping
在\stoptyping
表格单元格内实现,但如果我这样做,文件将无法编译。
我希望使用表格的原因在于我可以将其用于\placetable
浮点数,并且我可以在文档的其他部分以一种干净的方式引用它。
答案1
使用缓冲区。使用以下方法将内容存储在缓冲区中
\startbuffer[...]
...
\stopbuffer
并使用 检索它\typebuffer
。这是一个带有表格的简单示例。
\startsetups table:setup
\setupTABLE[each][each][frame=off]
\setupTABLE[row][first][style=bold,color=white,background=color,backgroundcolor=black]
\setupTABLE[row][last][bottomframe=on, framethickness=3bp]
\stopsetups
\starttext
\startbuffer[CPP]
#include <iostream.h>
void main()
{
cout << "Hello World\n";
}
\stopbuffer
\startbuffer[ruby]
puts "Hello World"
\stopbuffer
\startTABLE[setups=table:setup]
\NC C++ \NC Ruby \NC \NR
\NC \typebuffer[CPP] \NC \typebuffer[ruby] \NC \NR
\stopTABLE
\stoptext
这使
答案2
第一件事:表格中的逐字文本有效:
\starttext
\starttabulate
\NC Foo \NC Bar \NC\AR
\NC \type{Foo} \NC Bar \NC\AR
\stoptabulate
\bTABLE
\bTR
\bTD Foo \eTD
\bTD Bar \eTD
\eTR
\bTR
\bTD Foo \eTD
\bTD \type{Bar} \eTD
\eTR
\eTABLE
\stoptext
结果:
第二件事是,您不需要表来引用您的代码。您可以创建自己的浮动类型。但是,即使这样也不必浮动。以下代码创建了一个自定义浮动环境,虽然不完美,但希望足以让您入门。
\definefloat [code] [codes]
\starttext
\input knuth
As illustrated in \in{code}[code:example].
\startplacecode [title=Some example code., reference=code:example]
\starttyping
int main(){
return 0;
}
\stoptyping
\stopplacecode
\stoptext
它看起来像这样: