潜在问题
我发现 Lucida Bright 中的箭头尖\rightarrow
(因此在\to
和 中\mapsto
)太小,尤其是在较小的字体大小下。同样,我发现\relbar
用于形成\mapsto
的箭头尖不同钾Z 交换图(来自tikz-cd
)。
迄今为止的解决方案
来自的答案“收敛于”的长度箭头是多少?和使用 tikz 创建更好的 \to 和 \mapsto,它们也与 tikz-cd 图表匹配,我有新的定义(以及\tendsto
表示收敛的)如下。
\documentclass[10pt]{article}
\usepackage[left=2in,right=0.75in]{geometry}
\usepackage{amsmath}
\usepackage[lucidascale]{lucidabr}
\linespread{1.04}
\newcommand{\N}{\mathbb{N}}
\newcommand{\from}{\protect\colon}
\def\oldrightarrow{\rightarrow}
\def\oldto{\to}
\def\oldmapsto{\mapsto}
\newcommand*{\oldtendsto}{\mathrel{\oldrightarrow}}
\usepackage{scalerel}
\usepackage{tikz-cd}
\usetikzlibrary{arrows.meta}
\tikzcdset{every arrow/.append style = -{Stealth[scale=1]}}
\tikzcdset{arrows={line width=0.4pt}}
\newcommand{\basicrightarrow}{\mathrel{\tikz[baseline,line width=0.4pt]\draw[arrows=-{Stealth[scale=1.21]},yshift=0.75ex] (0,0) -- (1.667em,0);}}
\newcommand{\newrightarrow}{\scalerel*{\basicrightarrow}{\oldrightarrow}}
\newcommand{\newto}{\mathrel{\scalerel*{\basicrightarrow}{\oldrightarrow}}}
\newcommand{\barredrightarrow}{\mathrel{\tikz[baseline,line width=0.4pt]\draw[arrows={Bar[line width=1.125pt,scale=1.667]}-{Stealth[scale=1.67]},yshift=0.75ex] (0,0) -- (1.95em,0);}}
\newcommand{\newmapsto}{\mathrel{\scalerel*{\barredrightarrow}{\oldrightarrow}}}
\newcommand{\newtendsto}{\mathrel{\newto}}
% 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}[4]{% params; tendsto, to, mapsto
\texttt{\textbackslash#1}, \texttt{\textbackslash#2}, \texttt{\textbackslash#3}, and \texttt{\textbackslash#4}:\\[6pt]
Let $(x_n)_{n \in \N} \csname#1\endcsname x$ in~$X$ where $f \from X \csname#2\endcsname Y$ \& $x \csname#3\endcsname y$;
that is, $\lim_{n \csname#1\endcsname \infty} x_n = x$%
\[\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$}\\[6pt]
\quad\text{on the interval $[0, \csname#4\endcsname)$}.\]}
\begin{document}
\noindent%
\test{oldtendsto}{oldto}{oldmapsto}{oldrightarrow}
\test{newtendsto}{newto}{newmapsto}{newrightarrow}
\[
\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}
lucidascale
该包的选项lucidabr
是补偿 Lucida 字体相对较大的 x 高度(使用非线性缩放)。
即使您使用与 Lucida Bright 不同的字体,以下问题的答案也将很有用。
问题
- 我如何才能对我所调用的
\rightarrow
、\to
和重新使用相同的名称、和?这显然只是一个 TeX/LaTeX 宏扩展问题,但我不知道如何解决它。\mapsto
\newrightarrow
\newto
\newmapsto
- 我该如何将箭头垂直向上移动,以匹配原始箭头的垂直位置?我尝试将其更改
yshift=0.75ex
为更大的值,但这似乎只是改变了箭头的大小,而不是将其向上移动。 - 您对简化代码有什么建议吗?
- 您能对新箭头的设计提出改进建议吗?
答案1
回答第一个问题:为了保存旧箭,你应该使用
\let\oldrightarrow\rightarrow
\let\oldto\to
\let\oldmapsto\mapsto
我无法编译您的示例,但我确信这将解决无法覆盖\to
和其他命令的问题。
解释:如果你说\def\oldto{\to}
,那么当你调用 时,\oldto
它只会扩展为,然后扩展为 的当前含义。另一方面,使它具有与 相同的内容,因此稍后覆盖不会改变 的内容。\to
\oldto
\to
\let\oldto\to
\oldto
\to
\to
\oldto
\def\a{old contents}
\let\b\a
\def\c{\a}
\b; \c\par
\def\a{new contents }
\b; \c\par
\meaning\a; \meaning\b; \meaning\c