我想用\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}