\to 箭头与 tikz 或 tikzcd

\to 箭头与 tikz 或 tikzcd

我想用\to一个(大约)同样短的箭头替换通常的短箭头,但箭头尖端更漂亮。虽然我是新手,tikz但我喜欢 -方法,我用 编写所有交换图tikzcd。但在文本中使用此工具会呈现更长的箭头。到目前为止,我刚刚找到了非常不优雅的解决方案

\documentclass{article}
\usepackage{tikz}
\usepackage{tikz-cd}
\usetikzlibrary{arrows}
\tikzset{
commutative diagrams/.cd,
arrow style=tikz,
diagrams={>=stealth}}
\begin{document}
$\alpha: A$ \begin{tikzcd}[column sep=small]\arrow{r}\!\!\!\!\!\! &     \!\!\!\!\!\!\end{tikzcd} $B$
\end{document}

渲染结果为:

在此处输入图片描述

这不允许我重新定义命令\to。我相信有更好的方法来实现这一点。

答案1

使用\mathchoice您可以定义一个适应数学模式中周围风格的符号;下面有这样一个定义的例子,以及新定义的命令\myto和标准\to命令之间的比较(也许可以做一些更微调);:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows}

\newlength\mytoraise
\newlength\mytolength

\def\mytoi{\mathrel{\raisebox{\mytoraise}{%
\begin{tikzpicture}
\draw[-stealth] (0,0ex) -- (\mytolength,0ex);
\end{tikzpicture}}}}
\def\myto{\mathchoice
  {\setlength\mytoraise{0.55ex}\setlength\mytolength{9pt}\mkern1mu\mytoi\mkern1mu}
  {\setlength\mytoraise{0.55ex}\setlength\mytolength{8pt}\mkern1mu\mytoi\mkern1mu}
  {\setlength\mytoraise{0.4ex}\setlength\mytolength{7pt}\mkern2mu\mytoi\mkern2mu}
  {\setlength\mytoraise{0.25ex}\setlength\mytolength{5.5pt}\mkern1mu\mytoi\mkern1mu}
}

\begin{document}

${\displaystyle A\myto B}\quad A\myto B\quad \lim_{A\myto B}\quad A_{\lim_{A\myto B}}$

${\displaystyle A\to B}\quad A\to B\quad \lim_{A\to B}\quad A_{\lim_{A\to B}}$

\end{document}

在此处输入图片描述

一种允许可选参数指定属性的变体(我还添加了垂直比例因子,以便箭头尖端在样式\scriptstyle和中看起来成比例\scriptscriptstyle):

\documentclass{article}
\usepackage{graphicx}
\usepackage{tikz}
\usetikzlibrary{arrows}

\newlength\mytoraise
\newlength\mytolength
\newcommand\yscale{1}

\newcommand\mytoi[1][]{\mathrel{\raisebox{\mytoraise}{\scalebox{1}[\yscale]{%
\begin{tikzpicture}
\draw[-stealth,#1] (0,0ex) -- (\mytolength,0ex);
\end{tikzpicture}}}}}
\newcommand\myto[1][]{\mathchoice
  {\setlength\mytoraise{0.55ex}\setlength\mytolength{9pt}\mkern1mu\mytoi[#1]\mkern1mu}
  {\setlength\mytoraise{0.55ex}\setlength\mytolength{8pt}\mkern1mu\mytoi[#1]\mkern1mu}
  {\setlength\mytoraise{0.4ex}\setlength\mytolength{7pt}%
    \renewcommand\yscale{.8}\mkern2mu\mytoi[#1]\mkern2mu}
  {\setlength\mytoraise{0.25ex}\setlength\mytolength{5.5pt}%
    \renewcommand\yscale{.7}\mkern1mu\mytoi[#1]\mkern1mu}
}

\begin{document}

${\displaystyle A\to B}\quad A\to B\quad \lim_{A\to B}\quad A_{\lim_{A\to B}}$

${\displaystyle A\myto B}\quad A\myto B\quad \lim_{A\myto B}\quad A_{\lim_{A\myto B}}$

${\displaystyle A\myto[red] B}\quad A\myto[blue] B\quad \lim_{A\myto[orange] B}\quad A_{\lim_{A\myto[olive] B}}$

\end{document}

在此处输入图片描述

答案2

更新:

在绘画评论中虚线向下箭头egreg 提供了一个巧妙的技巧来简化调整大小问题,方法是\text{}

在此处输入图片描述

进一步增强:

  • 箭头开头似乎存在轻微的间距差异,这在最后一个例子中更为明显。我不知道是什么原因造成的。

代码

\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz}

\newcommand{\MyTo}[1][]{\mathrel{\text{\tikz \draw [-stealth, #1] (0,0) (0,0.5ex) -- (0.9em,0.5ex);}}}

\let\OldTo\to
\renewcommand{\to}{\MyTo}%

\begin{document}
$\alpha: A \MyTo[red] B \MyTo[blue,-latex] C \MyTo[blue,->] D$

$\beta: A \to B  $

$\gamma: A \OldTo B $ \quad original \verb|\to|

Testing math sizes:

$\alpha: A \OldTo B \quad M_{B \OldTo C} \quad L_{M_{\OldTo D}}$ \quad original \verb|\to|

$\alpha: A \MyTo[blue] B \quad M_{B \MyTo[blue] C} \quad L_{M_{\MyTo[blue] D}}$ \quad original \verb|\MyTo|
\end{document}

早期解决方案(不调整大小):

您可能应该只使用自己的命令而不是替换to,但如果您确实希望重新定义,to则可以使用\renewcommand

在此处输入图片描述

笔记:

  • 我添加了一个可选的第一个参数,\MyTo允许您传递绘图选项。

进一步增强:

  • 由于宽度参数1.0em不会根据数学样式进行调整,因此应该使用\mathchoice它来调整它(参见 Gonzalo Medina 的回答)。

代码:

\documentclass{article}
\usepackage{tikz}

\newcommand{\MyTo}[1][]{\mathrel{\tikz \draw [-stealth, #1] (0,0) (0,0.5ex) -- (0.9em,0.5ex);}}

\let\OldTo\to
\renewcommand{\to}{\MyTo}%

\begin{document}
$\alpha: A \MyTo[red] B \MyTo[blue,-latex] C \MyTo[blue,->] D$

$\beta: A \to B  $

$\gamma: A \OldTo B $ \quad original \verb|\to|
\end{document}

相关内容