使用 tikz 创建更好的 \to 和 \mapsto,它们也与 tikz-cd 图表匹配

使用 tikz 创建更好的 \to 和 \mapsto,它们也与 tikz-cd 图表匹配

我想使用 TiZ 创建标准 LaTeX 数学符号\to和宏的新版本\mapsto,用于数学映射符号,在 的情况下\to,用于数学收敛符号。

并且我希望箭头样式和箭杆粗细与tikzcd图表中使用的箭头相协调。

对于我使用的 Lucida Bright 数学字体,我发现箭头尖太小 - 因为上的箭头尖\rightarrow太小 - 而且上的条\mapsto也太小。

问题:

  1. 如何使 的终端Stealth箭头尖端变大\newmapsto,以便它与 的终端Stealth箭头尖端大小相同\newto
  2. 下面显示的代码结果是否创建了这些符号的令人愉悦且和谐的设计?有任何改进结果或代码的建议吗?em

警告:虽然代码显示了lucidabr包,但我实际上使用的是专有lucimatx包,其lucidasmallscale选项支持“非线性”缩放,10pt 字体大小缩放 90%,< 10pt 大小向上缩放(< 5pt 时最高缩放 0.95%),> 10pt 大小向下缩放(>= 22.5pt 时向下缩放 0.85 pt)。(这是为了补偿 Lucida 字体相对较大的 x 高度。) 下面显示的 pdf 输出中的图像使用 \lucimatx 通过这种缩放。

\documentclass[10pt]{article}
\usepackage[left=2in,right=0.75in]{geometry}

%% FOLLOWING LINE USED TO PRODUCE IMAGE SHOWN FOR THE OUTPUT
%\usepackage[lucidasmallscale=true]{lucimatx}
\usepackage{lucidabr}
\linespread{1.04}

\usepackage{amsmath}
\newcommand{\N}{\mathbb{N}}
\newcommand{\from}{\protect\colon}

\let\oldto\to
\let\oldmapsto\mapsto
\newcommand*{\oldtendsto}{\mathrel{\rightarrow}}

\usepackage{scalerel}
\usepackage{tikz-cd}
\usetikzlibrary{arrows.meta}

\tikzcdset{every arrow/.append style = -{Stealth[scale=1]}}
\tikzcdset{arrows={line width=0.4pt}}

\let\oldrightarrow\rightarrow
\newcommand{\newrightarrow}{\mathrel{\tikz[baseline]\draw[arrows=-{Stealth[scale=1]},yshift=0.75ex] (0,0) -- (1.4em,0);}}
\newcommand{\newto}{\mathrel{\scalerel*{\newrightarrow}{\oldrightarrow}}}
\newcommand{\newbarredrightarrow}{\mathrel{\tikz[baseline]\draw[arrows={Bar[line width=1.125pt,scale=1.667]}-{Stealth[scale=1.44]},yshift=0.75ex] (0,0) -- (1.95em,0);}}
\newcommand{\newmapsto}{\mathrel{\scalerel*{\newbarredrightarrow}{\oldrightarrow}}}

% command \test based upon the one used by Ruixi Zhang in answer at
% https://tex.stackexchange.com/questions/443614/what-length-arrow-for-converges-to/443623#443623
\newcommand*{\test}[3]{% params; tendsto, to, mapsto
  \makebox[7em][r]{\texttt{\textbackslash#1}, \texttt{\textbackslash#2} and \texttt{\textbackslash#3}}:\\[6pt]
  Let $(x_n)_{n \in \N} \csname#1\endcsname x$ in~$X$ where $f \from X \csname#2\endcsname Y$ and $x \csname#3\endcsname y$;
  that is, \[\lim_{n \csname#1\endcsname \infty} x_n = x \quad \text{where $\quad f \from X \csname#2\endcsname Y$ and $x \csname#3\endcsname y$}.\]}

\begin{document}

\noindent%
\test{oldtendsto}{oldto}{oldmapsto}% original
\test{newto}{newto}{newmapsto}
\[
\begin{tikzcd}
 & Y \arrow{dr}{g} & \\
X \arrow{ur}{f} \arrow{rr}{h} && Z
\end{tikzcd}
\]
\[
\begin{tikzcd}
X \arrow{r}{f} \arrow[swap]{d}{h} & Y \arrow{d}{k}
\\
Z \arrow{r}{g} & W
\end{tikzcd}
\]
\end{document}

新的 \to,\mapsto

原始查询

我一直在寻找箭头命令的实际定义tikz-cd\mapsto以便我可以修改其左端条的高度和厚度)。

感谢@Phelype Oleinik 和 @marmot 的评论,我确实在 中找到了定义texmf-dist/tex/generic/tikz-cd/tikzlibrarycd.code.tex。不幸的是,由于我的知识有限,TikZ我(目前)没有发现它有用。

答案1

对于箭头的长度,您可以使用参数row sepcolumn sep来定义图表中两个节点/单元之间的距离。在此之后http://mirrors.ctan.org/graphics/pgf/contrib/tikz-cd/tikz-cd-doc.pdf您可以在第 1.3 段“更改箭头提示”中看到,其中有一个列表显示所有可用的箭头类型。

在第 8 页您可以修改倒钩的粗细:

% in preamble
\tikzcdset{
  arrow style=tikz,
  diagrams={>={Straight Barb[scale=0.8]}}
}

% in document body
\begin{tikzcd}
  A \arrow[r, tail] \arrow[rd] & B \arrow[d, two heads] \\
  & D
\end{tikzcd}

答案2

只是把注释写清楚并纠正一个错误:Tee Barb需要纠正的参数。我实际上不知道为什么这个tikz-cd库使用.code而不是.style,所以我希望我在这里没有做非常愚蠢的事情。

\documentclass{article}
\usepackage{tikz-cd}
\usetikzlibrary{arrows.meta}
\tikzset{MyMapsto/.style={{Tee Barb[width=0pt]}-{Stealth[]}}}
\begin{document}
\[
\begin{tikzcd}[column sep=huge]
X   \arrow[r,MyMapsto]& Y\\
\end{tikzcd}
\]
\end{document}

在此处输入图片描述

相关内容