我正在尝试制作一个命令,它将接受函数名称、域、陪域、任意元素以及该元素映射到的内容,并输出一个图表。图表的第一行将是标准的 f:X-> Y。第二行将是域和陪域的旋转成员符号。第三行将类似于 x \mapsto f(x)。
到目前为止,我已经尝试过以下方法:
\usepackage{graphicx}
\newcommand{\rotin}{\rotatebox[origin=c]{90}{$\in$}}
\begin{tikzpicture}
\node (functionName) at (0, 0) {f:};
\node[right = of functionName] (domain) {A};
\node[below = 1mm of domain] (rotinleft) {$\rotin$};
\node[below = 1mm of rotinleft] (element) {x};
\node[right = 1cm of domain] (codomain) {B};
\node[below = 0.5mm of codomain] (rotinright) {$\rotin$};
\node[below = 0.5mm of rotinright] (image) {f(x)};
\draw[->] (domain) -- (codomain);
\draw[|->] (element) -- (image);
\end{tikzpicture}
我对相对定位还不熟悉,这个看起来不太好。我希望能够做类似上面的操作,但间距和箭头长度会自动调整。我从来不想要超短的箭头。
答案1
您可以使用以下代码https://tex.stackexchange.com/a/216042/4427但我认为旋转\in
没有任何用处。
\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz-cd}
% from https://tex.stackexchange.com/a/216042/
\tikzset{
symbol/.style={
draw=none,
every to/.append style={
edge node={node [sloped, allow upside down, auto=false]{$#1$}}}
}
}
\newcommand{\function}[5]{%
\begin{tikzcd}[
column sep=2em,
row sep=1ex,
ampersand replacement=\&
]
#1\colon \&[-3em]
#2\vphantom{#3} \arrow[r] \&
#3\vphantom{#2} \\
\&
#4\vphantom{#5} \arrow[u,symbol=\in] \arrow[r,mapsto] \&
#5\vphantom{#4} \arrow[u,symbol=\in]
\end{tikzcd}%
}
\begin{document}
\begin{gather*}
\function{f}{X}{Y}{x}{y} \\
\function{\Phi}{S_n}{S_n}{\sigma}{\tau\sigma\tau^{-1}}
\end{gather*}
\end{document}
答案2
尽管我同意 @egreg 的观点,即有多种排版方式,但我猜你的问题是为什么节点之间的距离如此之大。这是因为预定义的距离比你想要的要大,但你可以将其设置为你喜欢的任何值。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}[node distance=1mm]
\node (functionName) at (0, 0) {$f$:};
\node[right = of functionName] (domain) {$A$};
\node[below = 2mm of domain] (element) {$x$};
\path (element)--(domain)node[midway,sloped] {$\in$};
\node[right = 1cm of domain] (codomain) {$B$};
\node at (element-|codomain) (image) {$f(x)$};
\path (image)--(codomain)node[midway,sloped] {$\in$};
\draw[->] (domain) -- (codomain);
\draw[|->] (element) -- (image);
\end{tikzpicture}
\end{document}
使用 Ti 时钾Z,实在没有必要用\rotatebox
。