有时我需要在文本中的名词之间输入箭头,例如:
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}