我很喜欢使用 tikz-cd 绘制编译器正确性图表,但我无法获得与文本中使用的关系完全相同的箭头。特别是,我不确定如何进入\Mapsto
tikz-cd 图表。
我确实尝试过结合箭头选项来开始\Mapsto
工作:
\documentclass{article}
\usepackage{tikz}
\usepackage{tikz-cd}
\begin{document}
\begin{tikzcd}
M \rar[Rightarrow] \dar[maps to] & N \dar[maps to, Rightarrow] \\
M' \rar[Rightarrow, maps to] & N'
\end{tikzcd}
\end{document}
但这最终并不令人满意(在 TeXLive 2013 上):
如您所见,根据我给出参数的顺序,该栏要么缺失(N 到 N 箭头上应该有一个),要么大得可笑。我猜这是一个错误?有已知的解决方法吗?
答案1
我看了\Mapsto
看stmaryrd
cm |
我已将其用作重新定义遵循直线的箭头的模型的包double
。
该3.3
值是近似的,因此垂直线与implies
箭头一样宽(类似于外观)。示例中的\Mapsto
原始箭头的条相当短。maps to
代码
\documentclass[tikz]{standalone}
\usepackage{tikz-cd}
\expandafter\let\csname pgf@arrow@code@cm |\endcsname\relax
\makeatletter
\pgfarrowsdeclare{cm |}{cm |}{%
\[email protected]\pgflinewidth
\ifdim\pgfinnerlinewidth>0pt\relax
\pgfmathaddtolength\pgfutil@tempdima{-.5*\pgfinnerlinewidth}%
\fi
\pgfarrowsleftextend{+-\pgfutil@tempdima}%
\pgfarrowsrightextend{+\pgfutil@tempdima}%
}{%
\ifdim\pgfinnerlinewidth=0pt\relax
\pgfutil@tempdima4\pgflinewidth
\else
\pgfutil@tempdima\pgflinewidth
\advance\pgfutil@tempdima-\pgfinnerlinewidth
\pgfsetlinewidth{\pgfutil@tempdima/2}%
\multiply\[email protected]\relax
\fi
\pgfsetdash{}{+0pt}%
\pgfsetroundcap
\pgfpathmoveto{\pgfqpoint{0pt}{-\pgfutil@tempdima}}%
\pgfpathlineto{\pgfqpoint{0pt}{\pgfutil@tempdima}}%
\pgfusepathqstroke
}
\makeatother
\pgfqkeys{/tikz/commutative diagrams}{
Maps to/.style={
/tikz/commutative diagrams/Rightarrow,
/tikz/commutative diagrams/maps to},
Maps from/.style={
/tikz/commutative diagrams/Leftarrow,
/utils/exec=\pgfsetarrowsend{cm |}}
}
\begin{document}
\begin{tikzcd}
M \rar[Maps from] \dar[maps to] & N \dar[Maps to] \\
M' \rar[Maps to] & N'
\end{tikzcd}
\end{document}
输出
答案2
从 0.9c 版本(如果不是更早版本)开始,tikz-cd 现在提供了一个Mapsto
箭头。