Func
在下面的源代码中,我应该如何修改使用的宏,以便它重现仅使用环境的tikz-cd
宏的输出?func
array
具体来说,我应该如何:
- 通过版本控制行距,
tikz-cd
从而稳健地重现版本的行距array
? - 我如何缩短
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}
答案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}