使用 TikZ 进行函数定义

使用 TikZ 进行函数定义

我正在写一篇文章,其中 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}

在此处输入图片描述

编辑: 如果你想保留你的 TiZ 图片并逐渐切换到 LaTeX 语法,如果你担心箭头,那么有个好消息:正如@CarLaTeX 指出的那样,TiZ 有几十种箭头样式,其中一些与全局 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}

在此处输入图片描述

相关内容