任意长度的箭头

任意长度的箭头

有时我需要在文本中的名词之间输入箭头,例如:

Foo $\rightarrow$ Bar $\rightarrow$ Baz

有什么方法可以调整箭头的长度?我试过,\scalebox但它也会在垂直方向上缩小,而我想要的只是控制它的长度。

答案1

在此处输入图片描述

\documentclass[12pt]{article}
\begin{document}

Foo vv \parbox{.5cm}{\rightarrowfill} Bar $\rightarrow$ Baz

\end{document}

对于短于默认值的长度\rightarrow,你可以转到 TikZ:

\documentclass[12pt]{article}
\usepackage{tikz}
\begin{document}

\newcommand{\Arrow}[1]{%
\parbox{#1}{\tikz{\draw[->](0,0)--(#1,0);}}
}

Foo \Arrow{.1cm}Bar $\rightarrow$ Baz

\end{document}

在此处输入图片描述

有太多其他箭头可用于 TikZ,但是,毕竟我怀疑这些小箭头是可读的。

答案2

实施 Barbara Beeton 的建议,在字体中使用箭头lasy,但它比 的标准箭头要小\rightarrow。如果您总是使用 ,这应该不是问题\Arrow

\documentclass[12pt]{article}
\usepackage{pict2e,picture}

\makeatletter
\DeclareRobustCommand{\Arrow}[1][]{%
  \check@mathfonts
  \if\relax\detokenize{#1}\relax
    \settowidth{\dimen@}{$\m@th\rightarrow$}%
  \else
    \setlength{\dimen@}{#1}%
  \fi
  \sbox\z@{\usefont{U}{lasy}{m}{n}\symbol{41}}%
  \begin{picture}(\dimen@,\ht\z@)
  \roundcap
  \put(\dimexpr\[email protected]\wd\z@,0){\usebox\z@}
  \put(0,\fontdimen22\textfont2){\line(1,0){\dimen@}}
  \end{picture}%
}
\makeatother

\begin{document}

Foo \Arrow[.1cm] Bar $\rightarrow$ Baz

\Arrow\Arrow[1cm]\Arrow[.5cm]

$\rightarrow$

\end{document}

在此处输入图片描述

答案3

这是一种轻量级的方法,不使用任何包,甚至不使用图片环境。

\documentclass{article}

\newcommand{\myarrow}[1][1cm]{\mathrel{%
   \hbox{\rule[\dimexpr\fontdimen22\textfont2-.2pt\relax]{#1}{.4pt}}%
   \mkern-4mu\hbox{\usefont{U}{lasy}{m}{n}\symbol{41}}}}

\makeatletter

\setbox0\hbox{$\xdef\scriptratio{\strip@pt\dimexpr
    \numexpr(\sf@size*65536)/\f@size sp}$}

\newcommand{\myscriptarrow}[1][1cm]{{%
    \hbox{\rule[\scriptratio\dimexpr\fontdimen22\textfont2-.2pt\relax]
               {\scriptratio\dimexpr#1\relax}{\scriptratio\dimexpr.4pt\relax}}%
   \mkern-4mu\hbox{\let\f@size\sf@size\usefont{U}{lasy}{m}{n}\symbol{41}}}}

\makeatother

\begin{document}

\[x-a\myarrow b_{c\myscriptarrow d-e}-f\]
\[x-a\myarrow[.5cm] b_{c\myscriptarrow[.5cm] d-e}-f\]
\[x-a\myarrow[1mm] b_{c\myscriptarrow[1mm] d-e}-f\]

\end{document}

在此处输入图片描述

与其他答案一样,它实现了@BarbaraBeeton关于在字体中使用箭头的建议lasy。长度参数或\myscriptarrow会自动缩放,因此它应该与相同\myarrow


通过使用以下更短的代码可以获得等效结果\vcenter

\documentclass{article}

\newcommand{\myarrow}[1][1cm]{\mathrel{%
   \vcenter{\hbox{\rule[-.2pt]{#1}{.4pt}}}%
   \mkern-4mu\hbox{\usefont{U}{lasy}{m}{n}\symbol{41}}}}

\makeatletter

\setbox0\hbox{$\xdef\scriptratio{\strip@pt\dimexpr
    \numexpr(\sf@size*65536)/\f@size sp}$}

\newcommand{\myscriptarrow}[1][1cm]{{%
    \vcenter{\hbox{\rule[\scriptratio\dimexpr-.2pt\relax]
               {\scriptratio\dimexpr#1\relax}{\scriptratio\dimexpr.4pt\relax}}}%
   \mkern-4mu\hbox{\let\f@size\sf@size\usefont{U}{lasy}{m}{n}\symbol{41}}}}

\makeatother

\begin{document}

\[x-a\myarrow b_{c\myscriptarrow d-e}-f\]
\[x-a\myarrow[.5cm] b_{c\myscriptarrow[.5cm] d-e}-f\]
\[x-a\myarrow[1mm] b_{c\myscriptarrow[1mm] d-e}-f\]
\end{document}

可以\myscriptarrow使用\mathrel。其唯一的效果(按照其注定的脚本样式)是抑制与紧接在前或紧接在后的大符号( \sum、 、...)之间的小空格。\prod

\myscriptarrow如果删除\scriptratio缩放规则厚度和用于居中的垂直偏移的两个代码(缩放宽度的代码必须保留),则可以简化代码 。


对于厚度来说,更好的选择可能是使用\fontdimen8扩展字体。

\documentclass{article}

\newcommand{\myarrow}[1][1cm]{\mathrel{%
   \vcenter{\hbox{\rule[-.5\fontdimen8\textfont3]{#1}{\fontdimen8\textfont3}}}%
   \mkern-4mu\hbox{\usefont{U}{lasy}{m}{n}\symbol{41}}}}

\makeatletter

\setbox0\hbox{$\xdef\scriptratio{\strip@pt\dimexpr
    \numexpr(\sf@size*65536)/\f@size sp}$}

\newcommand{\myscriptarrow}[1][1cm]{{%
    \vcenter{\hbox{\rule[-.5\fontdimen8\scriptfont3]
               {\scriptratio\dimexpr#1\relax}{\fontdimen8\scriptfont3}}}%
   \mkern-4mu\hbox{\let\f@size\sf@size\usefont{U}{lasy}{m}{n}\symbol{41}}}}

\makeatother

\begin{document}

\[x-a\myarrow b_{c\myscriptarrow d-e}-f\]
\[x-a\myarrow[.5cm] b_{c\myscriptarrow[.5cm] d-e}-f\]
\[x-a\myarrow[1mm] b_{c\myscriptarrow[1mm] d-e}-f\]
\end{document}

在此处输入图片描述

相关内容