如何在 XeLaTeX 或 LuaLaTeX 下的 TikZ 图表中使用 unicode 数学字体中的箭头?

如何在 XeLaTeX 或 LuaLaTeX 下的 TikZ 图表中使用 unicode 数学字体中的箭头?

我喜欢 TikZ 图表中的箭头与数学字体箭头相匹配。对于 Computer Modern 来说,这没有问题:TikZ 箭头库提供了匹配的箭头。

但我经常使用其他字体,这些字体的箭头非常不同。现在,我可以(并且已经)定义了新的 PGF 箭头,它们与字体箭头近似。但我认为,在使用 unicode 数学字体时,更优雅、更通用的解决方案是使用 U+2303(“向上箭头”)和 U+2304(“向下箭头”)处应有的箭头。

这是我第一次尝试定义这种箭头:

\documentclass{article}

\usepackage{unicode-math}
\setmathfont{Asana Math}

\usepackage{tikz}

\pgfarrowsdeclare{mathfont to}{mathfont to}
{
  \pgfarrowsleftextend{0\pgflinewidth}
  \pgfarrowsrightextend{0\pgflinewidth}
}
{
  \pgfpathmoveto{\pgfpointorigin}
  \pgftext[rotate=90,bottom]{$\char"2304$}
}

\tikzset{
  >=mathfont to,
}

\begin{document}
Test:
\begin{tikzpicture}
%
\draw[->] (1,0)--(2,0);
\draw[->] (1,0.5)--(1,1.5);
%
\end{tikzpicture}
\end{document}

我的期待是这个箭头定义会将向下箭头符号的底部(或多或少是箭头尖端的位置)放在箭头的末端,旋转以匹配箭头的方向,如\pgftext手册中的讨论一样 - 基本上我想要实现的,除了一些调整和设置\pgfarrowsleftextend\pgfarrowsrightextend

结果有三个问题:向下箭头符号的底部不在正确的位置;箭头符号未旋转;并且(非常奇怪)它只出现在两个测试箭头中的第一个旁边。这些问题在 XeLaTeX 和 LuaLaTeX 下都会发生。(我没想到输出会有什么不同。)

这些问题可以修复吗?如果可以,如何修复?或者它们反映了 PGF/TikZ 设计中的一些深层特性,使得这个想法不可行?(我可以很容易地想象,调用\pgftext箭头代码应该是被禁止的,就像\pgfusepath。)

更新:更新 pgf 包后,我现在得到的结果略有不同:箭头符号现在旋转到指向右侧,但位于 (0,0) 而不是箭头的末端。我无法判断现在两个箭头是否都绘制在该位置,还是只有一个箭头。

答案1

我认为箭头类型不适合这种情况。箭头应该是“可设置样式的”(我们可以设置长度、填充和绘制颜色等)。对我来说,你必须为此使用标记。

下面是一个操作示例:

\documentclass[tikz,border=10, convert=none]{standalone}
\usepackage{unicode-math}
\setmathfont{Asana Math}

\usetikzlibrary{decorations.markings}
\tikzset{
  -math/.style={
    shorten >=1.4\pgflinewidth,
    postaction=decorate,
    decoration={markings, mark=at position 1 with {
        \node[scale=1.4\pgflinewidth, xshift=-1.7pt,transform shape,rotate=90]{$\char"2304$}; }}}
}

\begin{document}
  \begin{tikzpicture}
    \draw[line width=.1pt, -math] (1,0.5)--+(45:1);
    \draw (1,0) edge[bend right,thick,red,-math] +(45:1);
  \end{tikzpicture}
\end{document}

使用 XeLaTeX 编译的结果是

在此处输入图片描述

相关内容