我目前还在学习使用 TikZ 为我的场论论文添加图表,但目前看来我缺乏灵活使用这个工具的能力。我想要创建的图表如下: 但是,基于我对 TikZ 语法的理解,我只能创建以下内容:
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\node (Q1) at (0,0) {F};
\node (Q2) at (2,2) {D};
\node (Q3) at (0,4) {K};
\node (Q4) at (-2,2) {E};
\draw (Q1)->(Q2);
\draw (Q1)->(Q4);
\draw (Q3)->(Q4);
\draw (Q2)->(Q3);
\end{tikzpicture}
\end{document}
我想问一些初学者的问题:
- 如何将线段变成箭头?
- 我如何才能精确设置箭头的角度?
- 如何将两个 TikZ 图像并排放置?
答案1
您可以将两个图表合并为一个,tikzcd
以确保正确对齐。使用设置column sep
可between origins
确保两个图表具有相同的间距。您可以使用&[<length>]
增加(或减少负值)列间距,如下面的代码所示,其中两个图表之间提供了额外的间距。
\documentclass{article}
\usepackage{tikz-cd, amsmath}
\DeclareMathOperator{\Gal}{Gal}
\begin{document}
\begin{tikzcd}[column sep={1.5cm, between origins}]
& K &&[10mm]& \Gal(K/K)\arrow[dr]\arrow[dl]&\\
E\arrow[ur] && D\arrow[ul] & \Gal(K/E)\arrow[dr] && \Gal(K/D)\arrow[dl]\\
& F\arrow[ur]\arrow[ul] &&& \Gal(K/F)
\end{tikzcd}
\end{document}
答案2
这演示了使用纯 PGF/Ti 的三种简单方法钾Z 即无tikz-cd
。
第一个方法对现有代码做了最小程度的修改。它只是修正了语法并添加了箭头。
第二种用途matrix of math nodes
Ti 的钾Z 的matrix
库来创建第二个图表。这有点复杂,但仍然不需要贡献的cd
库。
第三个用途tikzcd
。
最小变化
对于第一种情况,我们只需->
在图片选项中添加,使所有绘制的线条都变成箭头即可。然后我们->
在\draw
命令中更改为--
,并切换一对节点名称,以使箭头指向所需的方向。
\draw (Q1)--(Q2);
\draw (Q1)--(Q4);
\draw (Q4)--(Q3);
\draw (Q2)--(Q3);
我们还将节点的内容置于数学模式,并添加baseline=Q2.center
使图表在当前基线上居中。通过向第二个添加类似的选项tikzpicture
,两个图像在其中心水平对齐。
matrix of math nodes
第二张图的代码是
\begin{tikzpicture}[baseline=(gal-2-1.center)]
\matrix (gal) [matrix of math nodes,row sep=15mm]
{
& \gal{K/K} & \\
\gal(K/E) & & \gal(K/D) \\
& \gal(K/F) & \\
};
\begin{scope}[->]
\draw (gal-1-2.220) -- (gal-2-1.north);
\draw (gal-1-2.320) -- (gal-2-3.north);
\draw (gal-2-1.south) -- (gal-3-2.140);
\draw (gal-2-3.south) -- (gal-3-2.40);
\end{scope}
\end{tikzpicture}
这次,我们使用\begin{scope}[->] ... \end{scope}
添加箭头。这在当前情况下没有区别,但如果您想要将箭头添加到线块中,而同一图表中的其他线不应获得箭头,则很有用。我们也可以写
\draw [->] (<coordinate/node>) -- (<coordinate/node 2>);
在单线上添加箭头。
\matrix (gal) [matrix of math nodes,row sep=15mm]
{
& \gal{K/K} & \\
\gal(K/E) & & \gal(K/D) \\
& \gal(K/F) & \\
};
matrix of math nodes
matrix of nodes
为具有数学内容的节点设置一个。row sep
在行之间添加分隔,我们最终会\\
像在tabular
或array
外面一样使用它tikzpicture
。
\matrix (<name>) [<options>] { <content> };
创建一个matrix
名为<name>
的<options>
。<content>
由按行排列的节点\\
和按列排列的节点组成&
。同样,语法与tabular
/类似array
。
通过命名我们的matrix
,我们可以轻松地引用矩阵每个单元中的各个节点。(<name>-<row number>-<column number>)
引用适当的节点。 例如,(gal-1-2)
引用最顶部的节点,因为它位于第一行(1
)和中间列(2
)。 然后,我们可以使用此语法引用节点以添加箭头。
\draw (gal-1-2.220) -- (gal-2-1.north);
\draw (gal-1-2.320) -- (gal-2-3.north);
\draw (gal-2-1.south) -- (gal-3-2.140);
\draw (gal-2-3.south) -- (gal-3-2.40);
点后面的部分指定特定的锚点。例如,(gal-2-3.south)
指的是south
矩阵的第二行第三列节点的锚点gal
。
tikzcd
\begin{tikzcd}[row sep=15mm]
& \gal(K/K) \ar[dr] \ar[dl] & \\
\gal(K/E) \ar[dr] & & \gal(K/D) \ar[dl] \\
& \gal(K/F) & \\
\end{tikzcd}
这里\ar
画了一个指向矩阵中另一个节点的箭头。dr
表示向下和向右;dl
向下和向左。数学在这里是默认的,所以我们不需要做任何事情。tikzcd
图表本质上是一个matrix of math nodes
具有适合交换图的默认值和方便的简写语法的图表。
但是,我无法立即弄清楚如何正确对齐图表。
完整代码
\documentclass{standalone}
\usepackage{tikz}
\usepackage{mathtools}
\usetikzlibrary{matrix}
\usetikzlibrary{cd}
\DeclareMathOperator{\gal}{\mathrm{Gal}}
\begin{document}
\begin{tikzpicture}[->,baseline=(Q2.center)]
\node (Q1) at (0,0) {$F$};
\node (Q2) at (2,2) {$D$};
\node (Q3) at (0,4) {$K$};
\node (Q4) at (-2,2) {$E$};
\draw (Q1)--(Q2);
\draw (Q1)--(Q4);
\draw (Q4)--(Q3);
\draw (Q2)--(Q3);
\end{tikzpicture}
\begin{tikzpicture}[baseline=(gal-2-1.center)]
\matrix (gal) [matrix of math nodes,row sep=15mm]
{
& \gal{K/K} & \\
\gal(K/E) & & \gal(K/D) \\
& \gal(K/F) & \\
};
\begin{scope}[->]
\draw (gal-1-2.220) -- (gal-2-1.north);
\draw (gal-1-2.320) -- (gal-2-3.north);
\draw (gal-2-1.south) -- (gal-3-2.140);
\draw (gal-2-3.south) -- (gal-3-2.40);
\end{scope}
\end{tikzpicture}
\begin{tikzcd}[row sep=15mm]
& \gal(K/K) \ar[dr] \ar[dl] & \\
\gal(K/E) \ar[dr] & & \gal(K/D) \ar[dl] \\
& \gal(K/F) & \\
\end{tikzcd}
\end{document}