我想使用 Ti钾Z 创建标准 LaTeX 数学符号\to
和宏的新版本\mapsto
,用于数学映射符号,在 的情况下\to
,用于数学收敛符号。
并且我希望箭头样式和箭杆粗细与tikzcd
图表中使用的箭头相协调。
对于我使用的 Lucida Bright 数学字体,我发现箭头尖太小 - 因为上的箭头尖\rightarrow
太小 - 而且上的条\mapsto
也太小。
问题:
- 如何使 的终端
Stealth
箭头尖端变大\newmapsto
,以便它与 的终端Stealth
箭头尖端大小相同\newto
? - 下面显示的代码结果是否创建了这些符号的令人愉悦且和谐的设计?有任何改进结果或代码的建议吗?em
警告:虽然代码显示了lucidabr
包,但我实际上使用的是专有lucimatx
包,其lucidasmallscale
选项支持“非线性”缩放,10pt 字体大小缩放 90%,< 10pt 大小向上缩放(< 5pt 时最高缩放 0.95%),> 10pt 大小向下缩放(>= 22.5pt 时向下缩放 0.85 pt)。(这是为了补偿 Lucida 字体相对较大的 x 高度。) 下面显示的 pdf 输出中的图像使用 \lucimatx
通过这种缩放。
\documentclass[10pt]{article}
\usepackage[left=2in,right=0.75in]{geometry}
%% FOLLOWING LINE USED TO PRODUCE IMAGE SHOWN FOR THE OUTPUT
%\usepackage[lucidasmallscale=true]{lucimatx}
\usepackage{lucidabr}
\linespread{1.04}
\usepackage{amsmath}
\newcommand{\N}{\mathbb{N}}
\newcommand{\from}{\protect\colon}
\let\oldto\to
\let\oldmapsto\mapsto
\newcommand*{\oldtendsto}{\mathrel{\rightarrow}}
\usepackage{scalerel}
\usepackage{tikz-cd}
\usetikzlibrary{arrows.meta}
\tikzcdset{every arrow/.append style = -{Stealth[scale=1]}}
\tikzcdset{arrows={line width=0.4pt}}
\let\oldrightarrow\rightarrow
\newcommand{\newrightarrow}{\mathrel{\tikz[baseline]\draw[arrows=-{Stealth[scale=1]},yshift=0.75ex] (0,0) -- (1.4em,0);}}
\newcommand{\newto}{\mathrel{\scalerel*{\newrightarrow}{\oldrightarrow}}}
\newcommand{\newbarredrightarrow}{\mathrel{\tikz[baseline]\draw[arrows={Bar[line width=1.125pt,scale=1.667]}-{Stealth[scale=1.44]},yshift=0.75ex] (0,0) -- (1.95em,0);}}
\newcommand{\newmapsto}{\mathrel{\scalerel*{\newbarredrightarrow}{\oldrightarrow}}}
% command \test based upon the one used by Ruixi Zhang in answer at
% https://tex.stackexchange.com/questions/443614/what-length-arrow-for-converges-to/443623#443623
\newcommand*{\test}[3]{% params; tendsto, to, mapsto
\makebox[7em][r]{\texttt{\textbackslash#1}, \texttt{\textbackslash#2} and \texttt{\textbackslash#3}}:\\[6pt]
Let $(x_n)_{n \in \N} \csname#1\endcsname x$ in~$X$ where $f \from X \csname#2\endcsname Y$ and $x \csname#3\endcsname y$;
that is, \[\lim_{n \csname#1\endcsname \infty} x_n = x \quad \text{where $\quad f \from X \csname#2\endcsname Y$ and $x \csname#3\endcsname y$}.\]}
\begin{document}
\noindent%
\test{oldtendsto}{oldto}{oldmapsto}% original
\test{newto}{newto}{newmapsto}
\[
\begin{tikzcd}
& Y \arrow{dr}{g} & \\
X \arrow{ur}{f} \arrow{rr}{h} && Z
\end{tikzcd}
\]
\[
\begin{tikzcd}
X \arrow{r}{f} \arrow[swap]{d}{h} & Y \arrow{d}{k}
\\
Z \arrow{r}{g} & W
\end{tikzcd}
\]
\end{document}
原始查询
我一直在寻找箭头命令的实际定义tikz-cd
(\mapsto
以便我可以修改其左端条的高度和厚度)。
感谢@Phelype Oleinik 和 @marmot 的评论,我确实在 中找到了定义texmf-dist/tex/generic/tikz-cd/tikzlibrarycd.code.tex
。不幸的是,由于我的知识有限,TikZ
我(目前)没有发现它有用。
答案1
对于箭头的长度,您可以使用参数row sep
和column sep
来定义图表中两个节点/单元之间的距离。在此之后http://mirrors.ctan.org/graphics/pgf/contrib/tikz-cd/tikz-cd-doc.pdf您可以在第 1.3 段“更改箭头提示”中看到,其中有一个列表显示所有可用的箭头类型。
在第 8 页您可以修改倒钩的粗细:
% in preamble
\tikzcdset{
arrow style=tikz,
diagrams={>={Straight Barb[scale=0.8]}}
}
% in document body
\begin{tikzcd}
A \arrow[r, tail] \arrow[rd] & B \arrow[d, two heads] \\
& D
\end{tikzcd}
答案2
只是把注释写清楚并纠正一个错误:Tee Barb
需要纠正的参数。我实际上不知道为什么这个tikz-cd
库使用.code
而不是.style
,所以我希望我在这里没有做非常愚蠢的事情。
\documentclass{article}
\usepackage{tikz-cd}
\usetikzlibrary{arrows.meta}
\tikzset{MyMapsto/.style={{Tee Barb[width=0pt]}-{Stealth[]}}}
\begin{document}
\[
\begin{tikzcd}[column sep=huge]
X \arrow[r,MyMapsto]& Y\\
\end{tikzcd}
\]
\end{document}