tikz-cd 中的行距和箭头长度

tikz-cd 中的行距和箭头长度

Func在下面的源代码中,我应该如何修改使用的宏,以便它重现仅使用环境的tikz-cd宏的输出?funcarray

具体来说,我应该如何:

  1. 通过版本控制行距,tikz-cd从而稳健地重现版本的行距array
  2. 我如何缩短tikz-cd版本中的箭头以匹配array版本中的长度(并在版本中定位节点tikz-cd,使它们的位置与版本中的“X”,“Y”和“x”,“f(x)”项相同array

至于 (2),我尝试shorten=1em在每个\ar命令中包含选项,但是这会产生奇怪的结果;而我尝试包含它,scalearrow={0.5}{start}{end}但是这会产生 tikzcd 错误。

请注意,我只想在宏中进行必要的修改Func,以便它们能够不是影响tizkcd环境的其他实例!

目的:尽管该array版本运行良好(特别是因为我也有它的变体以允许不同类型的垂直对齐,然后项目具有不同的长度),但我想尝试一个tikz-cd版本以便于使用tikz构造进行额外的“装饰”。

\documentclass{article}
\usepackage{amsmath}
\usepackage{amsfonts}

\usepackage{tikz-cd}
\usetikzlibrary{arrows.meta,decorations.markings}
\tikzset{
    >={Straight Barb[scale=0.8]},
    commutative diagrams/arrow style=tikz
  }
\newcommand{\from}{\protect\colon}

% version using array:
\newcommand{\func}[6][]{%
\arraycolsep=0pt
\begin{array}[#1]{rlcl}
{#2} \from\, &{#3}&\,\to\,    &\,{#4}\\
            &{#5}&\,\mapsto\,&\,{#6}
\end{array}}

% version using tikz-cd:
\newcommand{\Func}[6][]{%
\begin{tikzcd}[
ampersand replacement=\&, 
row sep=-4pt,
column sep = small,
/tikz/column 1/.append style = {nodes = {anchor=base east}}
]
{#2 \from #3} \ar[r] \& {#4}\\
            {#5} \ar[r, mapsto] \& {#6}
\end{tikzcd}}

\begin{document}
\[
\func{f}{X}{Y}{x}{f(x)}
\]

\[
\Func{f}{X}{Y}{x}{f(x)}
\]
\end{document}

集合之间的 Map 和元素之间的 MapTo

答案1

我不确定您在这里真正想要实现什么,但如果您只是想以时尚的方式将箭头\to\mapsto与之匹配tikz-cd,那么您可以考虑分别将它们更改为\tikz\draw[->](0,0)--(.3,0);\tikz\draw(0,0)edge[commutative diagrams/mapsto](.3,0);。 (在下面的代码中,我修改了您的\func。)

在此处输入图片描述

\documentclass{article}
\usepackage{amsmath}

\usepackage{tikz-cd}
\usetikzlibrary{arrows.meta,decorations.markings}
\tikzset{
    >={Straight Barb[scale=0.8]},
    commutative diagrams/arrow style=tikz
  }
\newcommand{\from}{\protect\colon}

% version using array:
\newcommand{\func}[6][]{%
\arraycolsep=0pt
\begin{array}[#1]{rrll}
{#2} \from\, &{#3}& \;\tikz\draw[->](0,0)--(.3,0);\, &\,{#4}\\
            &{#5}& \;\tikz\draw(0,0)edge[commutative diagrams/mapsto](.3,0);\,&\,{#6}
\end{array}}

% version using tikz-cd:
\newcommand{\Func}[6][]{%
\begin{tikzcd}[
ampersand replacement=\&,
row sep=-4pt,
column sep = small,
/tikz/column 1/.append style = {nodes = {anchor=base east}}
]
{#2 \from #3} \ar[r] \& {#4}\\
            {#5} \ar[r, mapsto] \& {#6}
\end{tikzcd}}

\begin{document}
\[
\func{f}{X}{Y}{x}{f(x)}
\]

\[
\Func{f}{X}{Y}{x}{f(x)}
\]

\[
\func{f}{X}{YYYYYYYYY}{x}{f(x)}
\]

\[
\Func{f}{X}{YYYYYYYYY}{x}{f(x)}
\]
\end{document}

另一方面,由于tikz-cd版本中的箭头长度取决于条目的宽度,因此为了匹配箭头长度,您可能需要将列宽更改为固定值。但是,很难有一个适用于所有情况的适当值。

答案2

一些设置借鉴另一个答案

代码

\documentclass{article}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{tikz}
\usetikzlibrary{arrows.meta, cd}
\newcommand{\from}{\protect\colon}

% version using array:
\newcommand{\func}[6][]{%
  \begingroup
    \arraycolsep=0pt
    \begin{array}[#1]{@{}r@{}l@{}}
      #2 \from #3 & {}\to #4 \\
               #5 & {}\mapsto #6
    \end{array}
  \endgroup
}

% version using tikz-cd:
\newcommand{\Func}[6][]{%
  \begin{tikzcd}[
    ampersand replacement=\&,
    cells={inner sep=+0pt, outer sep=1.25*width("$\;$")},
    column sep/.evaluated=width("${}\to{}$"),
%    row sep={1.2em,between origins},
    row sep=.27em,
    /tikz/column 1/.append style={anchor=base east},
    /tikz/column 2/.append style={anchor=base west},#1]
    {#2 \from #3} \ar[r] \& {#4}\\
             {#5} \ar[r, mapsto] \& {#6}
  \end{tikzcd}%
}

\begin{document}
\[
\func{f}{X}{Y}{x}{f(x)}
\]
%\vspace{-3.25em}
\[
\Func{f}{X}{Y}{x}{f(x)}
\]
\end{document}

输出

在此处输入图片描述

相关内容