数学中更好的箭头与 tikz-cd 图相匹配

数学中更好的箭头与 tikz-cd 图相匹配

潜在问题

我发现 Lucida Bright 中的箭头尖\rightarrow(因此在\to和 中\mapsto)太小,尤其是在较小的字体大小下。同样,我发现\relbar用于形成\mapsto的箭头尖不同Z 交换图(来自tikz-cd)。

迄今为止的解决方案

来自的答案“收敛于”的长度箭头是多少?使用 tikz 创建更好的 \to 和 \mapsto,它们也与 tikz-cd 图表匹配,我有新的定义(以及\tendsto表示收敛的)如下。

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

\usepackage{amsmath}

\usepackage[lucidascale]{lucidabr}
\linespread{1.04}

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

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

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

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

\newcommand{\basicrightarrow}{\mathrel{\tikz[baseline,line width=0.4pt]\draw[arrows=-{Stealth[scale=1.21]},yshift=0.75ex] (0,0) -- (1.667em,0);}}
\newcommand{\newrightarrow}{\scalerel*{\basicrightarrow}{\oldrightarrow}}
\newcommand{\newto}{\mathrel{\scalerel*{\basicrightarrow}{\oldrightarrow}}}
\newcommand{\barredrightarrow}{\mathrel{\tikz[baseline,line width=0.4pt]\draw[arrows={Bar[line width=1.125pt,scale=1.667]}-{Stealth[scale=1.67]},yshift=0.75ex] (0,0) -- (1.95em,0);}}
\newcommand{\newmapsto}{\mathrel{\scalerel*{\barredrightarrow}{\oldrightarrow}}}
\newcommand{\newtendsto}{\mathrel{\newto}}

% 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}[4]{% params; tendsto, to, mapsto
  \texttt{\textbackslash#1}, \texttt{\textbackslash#2}, \texttt{\textbackslash#3}, and \texttt{\textbackslash#4}:\\[6pt]
  Let $(x_n)_{n \in \N} \csname#1\endcsname x$ in~$X$ where $f \from X \csname#2\endcsname Y$ \& $x \csname#3\endcsname y$;
  that is, $\lim_{n \csname#1\endcsname \infty} x_n = x$%
   \[\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$}\\[6pt]
   \quad\text{on the interval $[0, \csname#4\endcsname)$}.\]}

\begin{document}

\noindent%
\test{oldtendsto}{oldto}{oldmapsto}{oldrightarrow}
\test{newtendsto}{newto}{newmapsto}{newrightarrow}
\[
\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} 

Lucida Bright 的新箭头 笔记:

lucidascale该包的选项lucidabr是补偿 Lucida 字体相对较大的 x 高度(使用非线性缩放)。

即使您使用与 Lucida Bright 不同的字体,以下问题的答案也将很有用。

问题

  1. 我如何才能对我所调用的\rightarrow\to和重新使用相同的名称、和?这显然只是一个 TeX/LaTeX 宏扩展问题,但我不知道如何解决它。\mapsto\newrightarrow\newto\newmapsto
  2. 我该如何将箭头垂直向上移动,以匹配原始箭头的垂直位置?我尝试将其更改yshift=0.75ex为更大的值,但这似乎只是改变了箭头的大小,而不是将其向上移动。
  3. 您对简化代码有什么建议吗?
  4. 您能对新箭头的设计提出改进建议吗?

答案1

回答第一个问题:为了保存旧箭,你应该使用

\let\oldrightarrow\rightarrow
\let\oldto\to
\let\oldmapsto\mapsto

我无法编译您的示例,但我确信这将解决无法覆盖\to和其他命令的问题。


解释:如果你说\def\oldto{\to},那么当你调用 时,\oldto它只会扩展为,然后扩展为 的当前含义。另一方面,使它具有与 相同的内容,因此稍后覆盖不会改变 的内容。\to\oldto\to\let\oldto\to\oldto\to\to\oldto

\def\a{old contents}
\let\b\a
\def\c{\a}
\b; \c\par
\def\a{new contents }
\b; \c\par
\meaning\a; \meaning\b; \meaning\c

在此处输入图片描述

相关内容