答案1
这在 Ti 中绝对可行钾Z 或 PSTricks,但我认为对于像这样的简单图表来说,这有点过头了。我认为你应该使用tikz-cd
,代码非常少,并且专为这种图表而设计。
请记住,它的工作方式类似于matrix
(基本上是一张表),因此您知道如何放置各种“节点”。此外,箭头的命令也很简单,字母表示方向:u
向上、d
向下、向右r
和向左、向右下、向右下右等等。l
dr
drr
我看不懂某些箭头上的文字,所以你可能必须修复它,但它给出了想法。
输出
代码
\documentclass{article}
\usepackage{tikz-cd}
\begin{document}
\[\begin{tikzcd}
& & T(TM) & & T^*(TM)\\
& & T^{*}M \arrow[u, "X_H", swap] \arrow[urr, "\delta_H", swap]\\
R \arrow[uurr, "X_{H}\circ(X\circ\varphi)", bend left=45]
\arrow[urr, "\alpha\circ\varphi", swap, bend left]
\arrow[rr]
\arrow[drr, "X\circ\varphi", bend right]
\arrow[ddrr, "X_{L}\circ(X\circ\varphi)", swap, bend right=45]
& & M \arrow[u, "\alpha", swap] \arrow[d, "X"] \\
& & TM \arrow[d, "X_L"] \arrow[drr, "\delta_L"]\\
& & T(TM) & & T^*(TM)
\end{tikzcd}\]
\end{document}
答案2
环境所需的代码psmatrix
也不是很长。主要区别在于tikz-cd
先描述节点,然后描述节点连接。
\documentclass[border=3pt]{standalone}
\usepackage{pst-node}
\usepackage{auto-pst-pdf}
\begin{document}
\psset{arrows=->, arrowinset=0.15, linewidth=0.6pt, nodesep=2pt, labelsep=1pt, colsep=0.8cm, rowsep=1cm, shortput=nab}%
\everypsbox{\scriptstyle}
$ \begin{psmatrix}
%% nodes
& T(TM) & \pnode[0,-0.5]{TsTs}\rput[l](TsTs){\textstyle T^*(T^*M)}\\
&T^*M & \\
\mathbf{R} & M \\
& TM\\
&T(TM) & \pnode[0,0.5]{TsT}\rput[l](TsT){\textstyle T^*(TM)}
%% arrows
\ncline{2,2}{1,2}>{X_H}
\ncline{2,2}{TsTs}\nbput[npos = 0.6]{\theta_H}
\ncline{3,1}{3,2}^{\varphi}
\ncline{3,2}{2,2}>{\alpha}\
\ncline{3,2}{4,2}>{X}
\ncline{4,2}{5,2}>{X_L}
\ncline{4,2}{TsT}\naput[npos = 0.6]{\theta_L}
\psset{arcangle=40, npos=0.45, nrot=:U, nodesepA=4pt}
\ncarc{3,1}{2,2}\naput{\alpha\circ\varphi}
\ncarc{3,1}{1,2}\naput{X_H\circ(\alpha\circ\varphi)}
\psset{arcangle=-40}
\ncarc{3,1}{4,2}\naput[npos=0.5]{X\circ Y}
\ncarc{3,1}{5,2}\naput[npos=0.55]{X_H\circ(\alpha\circ\varphi)}
\end{psmatrix} $
\end{document}
答案3
希望我已经正确阅读了所有箭头,这是我的代码和输出:
\documentclass[a4paper]{report}
\usepackage{amsmath,amsfonts,amssymb,xypic}
\begin{document}
\[\xymatrix{
& T(TM) & T^\ast(T^\ast M) \\
& T^\ast M \ar[u]_{X_H} \ar[ur]_{\theta_H} \\
\mathbb R \ar@/^2pc/[uur]^{X_H\circ(\alpha\circ\phi)} \ar@/^1pc/[ur]^{\alpha\circ\gamma} \ar[r]^{\gamma} \ar@/_1pc/[dr]_{x\circ\gamma} \ar@/_2pc/[ddr]_{x_\iota\circ(x\circ\gamma)} & M \ar[d]_x \\
& TM \ar[d]_{X_\iota} \ar[dr]^{\theta_n} \\
& T(TM) & T^\ast(TM)
}\]
\end{document}
基本上,a\xymatrix
是一个大矩阵,其中你可以有箭头起始于你想要的任何单元格并结束于其中。
您将命令\ar
等放在箭头开始的单元格中,然后在[]
s 中指定箭头结束的位置,并使用d
表示向下、u
表示向上、r
表示向右和l
表示向左的组合,相对于您使用前一个字母到达的单元格。例如,假设我从 (4,1) 开始并且有[uurur]
。所以我有u
,我向上移动一个,到达 (3,1),然后是另一个u
,所以 (2,1),一个r
,所以 (2,2),另一个u
,所以 (1,2),和r
,所以我最终到达 (1,3)。当然,[uuurr]
是等效的,任何排列都是等效的。我从未尝试混合u
s 和d
s 或r
s 和l
s,但如果它没有给出错误,au
应该取消 anl
和 a d
an r
,反之亦然。
_
箭头后面^
放东西。不要问我关于转向箭头的更多细节,因为我自己经常会犯错 :),但是如果你有一个指向右边的箭头(也许是直上,所以是u
s 和r
s 的组合),_
则将东西放在它下面和^
上面。
然后是@
s 的世界。这个\ar@
命令是我所知道的最复杂的命令之一。你可以@
在一个箭头中使用多个 s,它们接受非常多样化的参数。我不会讲得太详细,但文档应该可以帮到你。
- 您有
@/_…/
,它将箭头“向下”弯曲(例如_
将东西放在“下面”)…,这肯定是一个维度。这有@/^…/
“向上”弯曲的对应项。我不知道@/…/
是什么,但它不应该给出错误。 - 然后我们有
@<…>
,它使箭头移动了…,这是一个维度。移动垂直于箭头本身,至少当箭头是直的时候是这样,但“垂直”的适当定义应该将这种解释扩展到弯曲的箭头(@/_…/
或@/^…/
箭头)。 - 您有
@{…}
,它指定了箭的形状(三位:尾部、箭杆、头部,按此顺序)。
我记得的就这些了。我已经很久没画图了,最近我换成了 tikz-cd,因为它允许使用彩色箭头,但xy
不幸的是它不支持。不过,我用这个包已经有几年了,它是绘制黑白图的好方法——直到你想弄乱箭头环或做一些奇怪的箭头摆弄,在xy
失控时,tikz-cd
前来救援,一旦你学会了如何使用它:)。
我应该指出的是,在我最后一次争论xypic
,TL 发行版的版本已过时,而最新版本可以在源码,该软件包作者的站点。
答案4
的用户lualatex
还可以使用luamplib
来编写内联 Metapost 图形。但它远不如 简洁tikz-cd
,而且您需要知道如何使用 MP。
\documentclass[a4paper]{article}
\usepackage{fontspec}
\setmainfont{TeX Gyre Termes}
\usepackage{unicode-math}
\setmathfont{TeX Gyre Termes Math}
\usepackage{luamplib}
\begin{document}
In theory, the interrelation of system and/or subsystem technologies must utilize
and be functionally interwoven with the evolution of specifications over a given
time period. In particular, any associated supporting element necessitates that
urgent consideration be applied to possible bidirectional logical relationship
approaches.
\[\begin{mplibcode}
vardef label_connect@#(expr i,j,s) =
save p, a, b; path p; pair a, b;
a = center c[i];
b = center c[j];
p = a -- b cutbefore bbox c[i] cutafter bbox c[j];
drawarrow p; label.@#(s,point 0.5 of p);
enddef;
beginfig(1);
bboxmargin := 5pt;
picture c[];
c5 = thelabel(btex $\mathbb{R}$ etex, 80 left);
c0 = thelabel(btex $M$ etex, origin);
c1 = thelabel(btex $T^*M$ etex, 60 up);
c2 = thelabel(btex $T(TM)$ etex, 120 up);
c3 = thelabel(btex $TM$ etex, 60 down);
c4 = thelabel(btex $T(TM)$ etex, 120 down);
c6 = thelabel(btex $T^*(T^*M)$ etex, 80 up + 80 right);
c7 = thelabel(btex $T^*(TM)$ etex, 80 down + 80 right);
for i=0 upto 7: draw c[i]; endfor
label_connect.rt (0, 1, btex $X$ etex);
label_connect.rt (1, 2, btex $X_H$ etex);
label_connect.rt (0, 3, btex $X$ etex);
label_connect.rt (3, 4, btex $X_L$ etex);
label_connect.top (5, 0, btex $Y$ etex);
label_connect.ulft (5, 1, btex $X\circ Y$ etex);
label_connect.llft (5, 3, btex $X\circ Y$ etex);
label_connect.lrt (1, 6, btex $\theta_H$ etex);
label_connect.urt (3, 7, btex $\theta_L$ etex);
path a,b;
a = center c[5] {up} .. {dir 30} center c[2] cutbefore bbox c[5] cutafter bbox c[2];
b = a reflectedabout(left,right);
drawarrow a; label.ulft(btex $X_H\circ (X\circ Y)$ etex, point 0.6 of a);
drawarrow b; label.llft(btex $X_L\circ (X\circ Y)$ etex, point 0.6 of b);
endfig;
\end{mplibcode}\]
Conversely, any associated supporting element recognizes other systems'
importance and the necessity for possible bidirectional logical relationship
approaches. However, a service-oriented paradigm is further compounded when taking
into account the evolution of specifications over a given time period.
\end{document}