免費論壇 繁體 | 簡體
Sclub交友聊天~加入聊天室當版主
分享
返回列表 发帖

全包围矩阵

问题来自:http://bbs.ctex.org/forum.php?mod=viewthread&tid=154094
要输入这样的矩阵:
微信截图_20170915202442.png
2017-9-18 14:03


方法一:用 http://www.latexstudio.net/archives/643 里提供的 qbordermatrix 包。

方法二:就是我在原帖中的 tikz 画法:
\(
\documentclass{article}
\usepackage{amsmath,amssymb}
\usepackage{tikz}
\usetikzlibrary{matrix,calc}
\begin{document}
\begin{tikzpicture}[baseline=(m-3-3.base),every node/.style={inner sep=0pt}]
\matrix (m) [matrix of math nodes,column sep=12pt,row sep=8pt]
{
\square & x & y & \lambda & c_i \\
f_1 & 2^* & \square & 0^\circ & 2 \\
f_2 & \square & 2^\circ & 0^* & 2 \\
f_2 & 0^\circ & 0^* & \square & 0 \\
d_j & 2 & 2 & 0 & \square \\
};
\coordinate (jiao1) at (m-2-2.north west);
\coordinate (jiao2) at (m-4-4.south east);
\node[rectangle,left delimiter=(,right delimiter=)]
at ($(jiao1)!0.5!(jiao2)$)
{
\tikz{\path(jiao1)(jiao2);}
};
\end{tikzpicture}
\end{document}
\)
效果:
QQ截图20170917172225.png
2017-9-18 14:08


用 tikz 画虽然麻烦些,但更自由些。

需要注意的是,括号的位置由 jiao1 和 jiao2 两个点来决定,它们实际上就是对角线的顶点。
上面的矩阵由于各元素宽度都差不多,所以取 m-2-2、m-4-4 或者 m-4-2、m-2-4 都是可以的。
而对于一般情形,还要看情况来取点。
像下面这样的情形就比较麻烦:
1 & 1 & 1 & 1 & 1 \\
2 & 2222222 & 2 & 2222222 & 2 \\
3 & 3 & 3 & 3 & 3 \\
4 & 4 & 4 & 4 & 4 \\
5 & 5 & 5 & 5 & 5 \\
最长的东西在同一行,无论取 m-2-2、m-4-4 还是 m-4-2、m-2-4 都不行,会是这样子:
QQ截图20170918143612.png
2017-9-18 14:37
   
QQ截图20170918143711.png
2017-9-18 14:37

这时得这样取:
\coordinate (jiao1) at (m-2-2.north west);
\coordinate (jiao2) at (m-4-4.south east-|m-2-4.east);
效果才是正确的:
QQ截图20170918144039.png
2017-9-18 14:40
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
冇钱又冇样、冇型又冇款、冇身材又冇文采、冇学历又冇能力、冇高度冇速度冇力度兼夹冇野做!(粤语)
口号:珍爱生命,远离考试。

tikz  画起图来真是棒的

TOP

本来想再演示更复杂的情况,比如在前三列上面加个花括号,于是照用同样的招式,在后面加上:
\coordinate (t1) at (m-1-1.north west);
\coordinate (t2) at (m-1-3.north east);
\node[rectangle,above delimiter=\{]
at (\$(t1)!0.5!(t2)\$)
{
\tikz{\path(t1)(t2);}
};
结果却出科意料:
QQ截图20170920135350.png
2017-9-20 13:55


为什么会向上偏移了呢?
研究了很久,通过各种测试,终于发现了问题所在,就是整个图指定了 baseline=(m-3-3.base),去掉它,就不会偏移。
这是为什么呢,因为这个 baseline 影响到了里面的 \tikz{\path(t1)(t2);},结果这个 \node 的大小除了要包含 (t1)(t2),还有 (m-3-3.base),而由于它在 (t1)(t2) 的下方,于是整个 \node 就变高了。
而1楼的没问题,正是因为 (m-3-3.base) 在 (jiao1)(jiao2) 之间,换言之,如果将1楼的两个点改成
\coordinate (jiao1) at (m-1-1.north west);
\coordinate (jiao2) at (m-2-2.south east);
同样会出问题:
QQ截图20170920142037.png
2017-9-20 14:21


但是,指定 baseline 是有必要的,它决定了与外面的东西如何对齐,不应该去掉,所以解决办法是将 \tikz{\path(t1)(t2);} 改成 \tikz[baseline=default]{\path(t1)(t2);}。

综上所述,可以写出以下的:
\(
\[
f(x)=
\begin{tikzpicture}[baseline=(m-3-3.base),every node/.style={inner sep=0pt}]
\matrix (m) [matrix of math nodes,column sep=12pt,row sep=8pt]
{
\square & x & y & \lambda & c_i \\
f_1 & 2^* & \square & 0^\circ & 2 \\
f_2 & \square & 2^\circ & 0^* & 2 \\
f_2 & 0^\circ & 0^* & \square & 0 \\
d_j & 2 & 2 & 0 & \square \\
};
\coordinate (jiao1) at (m-2-2.north west);
\coordinate (jiao2) at (m-4-4.south east);
\node[rectangle,left delimiter=(,right delimiter=)]  
at ($(jiao1)!0.5!(jiao2)$)  
{
\tikz[baseline=default]{\path(jiao1)(jiao2);}
};
\coordinate (jiao3) at (m-1-1.north west);
\coordinate (jiao4) at (m-2-2.south east);
\node[rectangle,left delimiter={[},right delimiter={]}]  
at ($(jiao3)!0.5!(jiao4)$)  
{
\tikz[baseline=default]{\path(jiao3)(jiao4);}
};
\coordinate (t1) at (m-1-1.north west);
\coordinate (t2) at (m-1-3.north east);
\node[rectangle,above delimiter=\{] (tt)
at ($(t1)!0.5!(t2)$)
{
\tikz[baseline=default]{\path(t1)(t2);}
};
\node[above=12pt] at (tt) {$t$};
\end{tikzpicture}
\]
\)
效果:
QQ截图20170920143905.png
2017-9-20 14:39
冇钱又冇样、冇型又冇款、冇身材又冇文采、冇学历又冇能力、冇高度冇速度冇力度兼夹冇野做!(粤语)
口号:珍爱生命,远离考试。

TOP

tikz好不好学?

TOP

回复 4# 其妙

不好

TOP

看你们搞得那么欢,还准备学呢,

TOP

返回列表 回复 发帖