灵感来自如何绘制蛇形引理中连接同态的“蛇”形箭头?我创建了自己的蛇形图(见下文)。
条目相当大,因此图形太宽。我的问题是:为什么图形只从页面中间开始,而不是从左侧开始?为什么左边有这么多的空闲空间?
\documentclass{article}
\usepackage{graphicx}
\usepackage{tikz}
\usetikzlibrary{matrix,arrows}
\begin{document}
\begin{tikzpicture}[descr/.style={fill=white,inner sep=1.5pt}]
\matrix (m) [
matrix of math nodes,
row sep=1em,
column sep=2em,
]
{ Q_{5}\oplus\bigoplus_{i\in\{1,2,3,4\}} Q_{12345\setminus i}[1] &
\bigoplus_{l\in\{1,2,3,4\}} Q_{l5}\oplus Q_{12345}[1] &
\bigoplus_{j\neq k\in\{1,2,3,4\}} Q_{jk5} \\
\bigoplus_{i\in\{1,2,3,4\}} Q_{12345\setminus i} &
Q_{12345} &
S_{12345} \\
};
\path[->, font=\scriptsize,>=latex]
(m-1-1) edge (m-1-2)
(m-1-2) edge (m-1-3)
(m-1-3) edge[out=355,in=175] (m-2-1)
(m-2-1) edge (m-2-2)
(m-2-2) edge (m-2-3);
\end{tikzpicture}
\end{document}
答案1
弯曲边缘会使边界框增大很多。这可以视为一个错误。要取消该效果,请添加绘制箭头 overlay
的选项。\path
你也可以考虑使用\limits
es\bigoplus
和\mathclap
(参考)以使下标占用更少的空间。这是我的版本:
\def\mathclap{\mathpalette\mathclapinternal}
\def\mathclapinternal#1#2{\clap{$\mathsurround=0pt#1{#2}$}}
\let\oldbigoplus=\bigoplus
\def\bigoplus{\oldbigoplus\limits}
\begin{tikzpicture}[remember picture=true]
\matrix (m) [
matrix of math nodes,
row sep=1em,
column sep=2em,
text height=1.5ex, text depth=0.25ex
]
{Q_{5}\oplus\bigoplus_{\mathclap{i\in\{1,2,3,4\}}} Q_{12345\setminus i}[1] &
\bigoplus_{\mathclap{l\in\{1,2,3,4\}}} Q_{l5}\oplus Q_{12345}[1] &
\bigoplus_{\mathclap{j\neq k\in\{1,2,3,4\}}} Q_{jk5} \\
\bigoplus_{\mathclap{i\in\{1,2,3,4\}}} Q_{12345\setminus i} &
Q_{12345} &
S_{12345} \\
};
\path[overlay,->, font=\scriptsize,>=latex]
(m-1-1) edge (m-1-2)
(m-1-2) edge (m-1-3)
(m-1-3) edge[out=348,in=172] (m-2-1)
(m-2-1) edge (m-2-2)
(m-2-2) edge (m-2-3);
\end{tikzpicture}
PS:descr/.style=...
除非您实际将样式应用于某些对象,否则您的声明不会产生任何效果。因此,您可以出于简单示例目的而删除该声明。
编辑:我已经采纳了@Caramdir 建议的编辑。
答案2
在 Matthew 的版本上还有一些其他的小改进:在原始示例中,我删除了text height=1.5ex, text depth=0.25ex
通常添加的箭头,以使文本复杂化。但是,这里有必要这样做。此外,弯曲箭头的起始和终止方向也需要稍微调整一下:
\documentclass{article}
\usepackage{tikz,mathtools} %mathtools provides \mathclap
\usetikzlibrary{matrix,arrows}
\let\oldbigoplus=\bigoplus
\def\bigoplus{\oldbigoplus\limits}
\begin{document}
\begin{tikzpicture}
\matrix (m) [
matrix of math nodes,
row sep=2.5em,
column sep=2em,
text height=1.5ex, text depth=0.25ex
]
{Q_{5}\oplus\bigoplus_{\mathclap{i\in\{1,2,3,4\}}} Q_{12345\setminus i}[1] &
\bigoplus_{\mathclap{l\in\{1,2,3,4\}}} Q_{l5}\oplus Q_{12345}[1] &
\bigoplus_{\mathclap{j\neq k\in\{1,2,3,4\}}} Q_{jk5} \\
\bigoplus_{\mathclap{i\in\{1,2,3,4\}}} Q_{12345\setminus i} &
Q_{12345} &
S_{12345} \\
};
\path[overlay,->, font=\scriptsize,>=latex]
(m-1-1) edge (m-1-2)
(m-1-2) edge (m-1-3)
(m-1-3) edge[out=348,in=172] (m-2-1)
(m-2-1) edge (m-2-2)
(m-2-2) edge (m-2-3);
\end{tikzpicture}
\end{document}
答案3
这绝对是弯曲的路径将物体向外推。要查看此情况,您可以通过以下方式在特定点绘制边界框:
\draw (current bounding box.north west) rectangle (current bounding box.south east);
在适当的时机,比如在命令之后\matrix
和命令之后\path
。请注意,这会绘制当前的边界框,因此将其放在不同的地方可以显示边界框在图表中如何变化。
作为替代解决方案,\useasboundingbox
设置图片的边界框。准确地说,这意味着就边界框而言,此命令之后的所有内容都将被忽略。因此,将其放在矩阵命令之后但在路径命令之前意味着矩阵用于边界框,但路径不用于边界框。因此我的解决方案是:
\documentclass{article}
\thispagestyle{empty}
\usepackage[scale=.96]{geometry}
\usepackage{tikz}
\usetikzlibrary{matrix,arrows}
\begin{document}
\begin{tikzpicture}
\matrix (m) [
matrix of math nodes,
row sep=2em,
column sep=2em,
]
{ Q_{5}\oplus\bigoplus_{i\in\{1,2,3,4\}} Q_{12345\setminus i}[1] &
\bigoplus_{l\in\{1,2,3,4\}} Q_{l5}\oplus Q_{12345}[1] &
\bigoplus_{j\neq k\in\{1,2,3,4\}} Q_{jk5} \\
\bigoplus_{i\in\{1,2,3,4\}} Q_{12345\setminus i} &
Q_{12345} &
S_{12345} \\
};
\useasboundingbox (0,0);
\path[->, font=\scriptsize,>=latex]
(m-1-1) edge (m-1-2)
(m-1-2) edge (m-1-3)
(m-1-3) edge[out=355,in=175] (m-2-1)
(m-2-1) edge (m-2-2)
(m-2-2) edge (m-2-3);
\end{tikzpicture}
\end{document}
标签的效果overlay
类似。该标签将路径从边界框考虑中移除,而\useasboundingbox
将移除其后的所有内容(但不包括其自身)。