我正在写一篇文章,其中 TikZ 用于所有非内联函数。为了保持格式一致,因此我想使用 TikZ 来生成如下函数定义:
如您所见,箭头的长度不同。
代码如下:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{center}
\begin{tikzpicture}
\node (a) at (0,0) {$\mathbf{C}(A,X)$};
\node (b) at (3.6,0) {$\mathbf{C}(A,Y)$};
\draw[->] (a) to node (f) [above] {$\mathbf{C}(A,f)$} (b);
\node (c) at (0,-0.55) {$\varphi$};
\node (d) at (3.6,-0.55) {$f \circ \varphi$};
\draw[|->] (c) to node (g) {} (d);
\end{tikzpicture}
\end{center}
\end{document}
问题。关于这个还能做什么?
答案1
带有array
(和一些强制)的。
\documentclass{article}
\usepackage{amsmath}
\newcommand{\xxxrightarrow}[2][]{%
\xrightarrow[\quad #1 \quad]{\quad #2 \quad}%
}
\newcommand{\xxxmapstofill}{%
{\mapstochar}
\smash{-}\mkern-7mu
\cleaders\hbox{$\mkern-2mu\smash{-}\mkern-2mu$}\hfill
\mkern-7mu\mathord\rightarrow
}
\newcommand{\function}[5]{%
\begin{array}{@{}c@{}c@{}c@{}}
#1 & \;\xxxrightarrow{#2}\; & #3 \\
#4 & \;\xxxmapstofill\; & #5
\end{array}%
}
\begin{document}
\[
\function{\mathbf{C}(A,X)}{\mathbf{C}(A,f)}{\mathbf{C}(A,Y)}
{\varphi}{f\circ\varphi}
\]
\end{document}
该命令\xxxrightarrow
基于\xrightarrow
,但在上标或下标周围添加了一些空格,因为您似乎想要更长的箭头(在我看来,您不应该这样)。
箭头下方的单元格用由 组成的箭头填充\mapstochar
,它是用于制作 的小垂直线\mapsto
。对于填充,我使用了一个修改版本,\rightarrowfill
基本上删除了其定义周围的美元符号,该版本可在内核文件 中找到fontmath.ltx
:
\def\rightarrowfill{$\m@th\smash-\mkern-7mu%
\cleaders\hbox{$\mkern-2mu\smash-\mkern-2mu$}\hfill
\mkern-7mu\mathord\rightarrow$}
由于我在单元格中使用它array
,它应该已经处于数学模式。提供\cleaders
重复段,以便填充空间。
答案2
您确定要使用 Ti 吗钾Z 是吗?
\documentclass{article}
\usepackage{tikz}
\usepackage{amsmath,mathtools}
\begin{document}
With TikZ:
\begin{center}
\begin{tikzpicture}
\node[anchor=east] (a) at (0,0) {$\mathbf{C}(A,X)$};
\node[anchor=west] (b) at (3,0) {$\mathbf{C}(A,Y)$};
\draw[->] (a) to node (f) [above] {$\mathbf{C}(A,f)$} (b);
\node[anchor=east] (c) at (0,-0.55) {$\varphi$};
\node[anchor=west] (d) at (3,-0.55) {$f \circ \varphi$};
\draw[|->] (c) to node (g) {} (d);
\end{tikzpicture}
\end{center}
Without TikZ:
\begin{align*}
\mathbf{C}(A,X)&\xrightarrow{~\mathbf{C}(A,f)~}\mathbf{C}(A,Y)\\
\varphi&\xmapsto{\hphantom{~\mathbf{C}(A,f)~}}f \circ \varphi
\end{align*}
\end{document}
编辑: 如果你想保留你的 Ti钾Z 图片并逐渐切换到 LaTeX 语法,如果你担心箭头,那么有个好消息:正如@CarLaTeX 指出的那样,Ti钾Z 有几十种箭头样式,其中一些与全局 Ti 模相似(或一致)钾Z 选项)标准 LaTeX 箭头。(后者也可以更改,但这需要更多的努力。)只需加载库arrows.meta
,然后重新定义箭头样式,例如说
\usetikzlibrary{arrows.meta}
\tikzset{>={Computer Modern Rightarrow}}
这是完整的代码。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\tikzset{>={Computer Modern Rightarrow}}
\usepackage{amsmath,mathtools}
\begin{document}
With TikZ:
\begin{center}
\begin{tikzpicture}
\node[anchor=east] (a) at (0,0) {$\mathbf{C}(A,X)$};
\node[anchor=west] (b) at (3,0) {$\mathbf{C}(A,Y)$};
\draw[->] (a) to node (f) [above] {$\mathbf{C}(A,f)$} (b);
\node[anchor=east] (c) at (0,-0.55) {$\varphi$};
\node[anchor=west] (d) at (3,-0.55) {$f \circ \varphi$};
\draw[|->] (c) to node (g) {} (d);
\end{tikzpicture}
\end{center}
Without TikZ:
\begin{align*}
\mathbf{C}(A,X)&\xrightarrow{~\mathbf{C}(A,f)~}\mathbf{C}(A,Y)\\
\varphi&\xmapsto{\hphantom{~\mathbf{C}(A,f)~}}f \circ \varphi
\end{align*}
\end{document}
离题了,但您可能还想看看\mathbb{C}
或(在文档序言中\mathbbm{C}
要求)而不是。\usepackage{bbm}
\mathbf{C}
答案3
我反而使用了另一种方法tikz-cd
。
\documentclass{article}
\usepackage{tikz-cd}
\usepackage{amsmath,mathtools}
\begin{document}
\begin{tikzcd}
\mathbf{C}(A,X) \arrow[rr, "{\mathbf{C}(A,f)}"] & & \mathbf{C}(A,Y) \\
\varphi \arrow[rr, maps to] & & f \circ \varphi
\end{tikzcd}
\end{document}
这里还有另一个版本,但我认为长度取决于使用的字符。我做了很多测试。我使用了相同的长度[12em]
。
\documentclass{article}
\usepackage{tikz-cd}
\usepackage{amsmath,mathtools}
\begin{document}
\[
\begin{tikzcd}
\mathbf{C}(A,X) \ar[r,shift left=.25ex,"{\mathbf{C}(A,f)}"] & [12em] \mathbf{C}(A,Y) \\
\varphi\ar[r,maps to] & [12em]
f \circ \varphi \\
\end{tikzcd}
\]
\end{document}