在 LaTeX 中,我可以使用:
\[
\left[\,\begin{array}{rr|r}2&-3&6\\ 3&4&-9\end{array}\,\right]
\]
但是,在 ConTeXt 中,尤其是当我想要列右对齐时,我似乎必须使用:
\startformula
\left[\,\startmathmatrix[n=2,align={right,right}]
\NC 2 \NC -3 \NR
\NC 3 \NC 4 \NR
\stopmathmatrix\;\right|
\left.\startmathmatrix[n=2,align={right}]
\NC 6 \NR
\NC 9 \NR
\stopmathmatrix\,\right]
\stopformula
它看上去非常冗长和笨拙(特别是与简洁明了的 LaTeX 相比)。
那么 - 在 ConTeXt 中排版增强矩阵的最佳方法是什么?
谢谢!
答案1
以下是一个主要供 Aditya 查看的想法的 MWA:
\unprotect
\def\dosetmatrixcolumn#1%
{\letvalue{\??eq:\v!left :\number\eqaligncolumn}\hfil
\letvalue{\??eq:\v!right:\number\eqaligncolumn}\hfil
% this is new:
\doif{#1}\v!rule {\letvalue{\??eq:\v!left :\number\eqaligncolumn}\relax
\setvalue{\??eq:\v!right:\number\eqaligncolumn}%
{\kern -.5\mathalignmentparameter\c!distance
\vrule
\kern -.5\mathalignmentparameter\c!distance}}%
\doif{#1}\v!left {\letvalue{\??eq:\v!left :\number\eqaligncolumn}\relax
\letvalue{\??eq:\v!right:\number\eqaligncolumn}\hfil}%
\doif{#1}\v!right {\letvalue{\??eq:\v!left :\number\eqaligncolumn}\hfil
\letvalue{\??eq:\v!right:\number\eqaligncolumn}\relax }%
\doif{#1}\v!middle{\letvalue{\??eq:\v!left :\number\eqaligncolumn}\hfil
\letvalue{\??eq:\v!right:\number\eqaligncolumn}\hfil}}
\protect
\definemathmatrix
[augmentedarray]
[n=4,left={\left[\,},right={\,\right]},align={right,right,rule,right}]
\starttext
\startformula
\startaugmentedarray
\NC 2 \NC -3 \NC \NC 6 \NR
\NC 3 \NC 4 \NC \NC 9 \NR
\stopaugmentedarray
\stopformula
\stoptext
这段代码有两个错误:
- 内部宏
\dosetmatrixcolumn
需要重新定义,这应该在上下文核心本身中完成,而不是作为文档的一部分。 - 有点
\NC \NC
丑。
但它还是节省了大量的打字时间。
答案2
这不是真正的答案,但以下代码给出了相同的结果
\[
\left[\begin{array}{@{}rr|r@{}}2&-3&6\\ 3&4&-9\end{array}\right]
\]
\[
\left[\openup1\jot\offinterlineskip\vcenter{\halign{%
\strut
\hfil$#$\hskip\arraycolsep&
\hskip\arraycolsep\hfil$#$\hskip\arraycolsep\kern-.2pt\vrule\kern-.2pt&
\hskip\arraycolsep\hfil$#$\cr
2&-3&6\cr
3&4&-9\cr}}
\right]
\]
这只是一个教 ConTeXt 做\halign
。请注意数学更喜欢分隔符间距紧密,就像在bmatrix
环境中看到的那样,但这是一个品味问题。