我创建了一个简单的宏来输入一种范围符号(a:b
),并用较大的冒号来区分它与普通文本。
这是带有 MWE 的宏:
\documentclass{minimal}
\usepackage{graphicx}
\newcommand{\range}[3][]{%
\def\rangedbldot{\scalebox{1.4}{:}}%
\if\relax\detokenize{#1}\relax%
\ensuremath{#2\rangedbldot#3}%
\else%
\ensuremath{#2\rangedbldot#1\rangedbldot#3}%
\fi%
}
\begin{document}
\(1{:}2\)
\(\range{1}{2}\)
\(a_{\range{1}{2}}\)
\end{document}
结果如下:
我期望的是,由于我使用的是\scalebox
,而不是\resizebox
,因此缩放后的冒号将与当前字体大小成比例,下标比普通文本中的要小一点。但显然事实并非如此。
我这里哪里做错了?我该如何修复宏以使冒号在两种情况下都成比例?
答案1
使用\mathpalette
,请参阅\mathpalette 的奥秘
\documentclass{article}
\usepackage{graphicx}
\newcommand{\range}[3][]{%
\if\relax\detokenize{#1}\relax
\ensuremath{#2\rangedbldot#3}%
\else
\ensuremath{#2\rangedbldot#1\rangedbldot#3}%
\fi
}
\newcommand{\rangedbldot}{\mathpalette\dorangedbldot\relax}
\newcommand{\dorangedbldot}[2]{%
\scalebox{1.4}{$#1:$}%
}
\begin{document}
\(1{:}2\)
\(\range{1}{2}\)
\(a_{\range{1}{2}}\)
\end{document}
答案2
在这里我使用\ThisStyle{...\SavedStyle...}
包scalerel
将适当的数学大小带入其中\scalebox
。
\documentclass{minimal}
\usepackage{graphicx,scalerel}
\newcommand{\range}[3][]{%
\def\rangedbldot{\ThisStyle{\scalebox{1.4}{$\SavedStyle:$}}}%
\if\relax\detokenize{#1}\relax%
\ensuremath{#2\rangedbldot#3}%
\else%
\ensuremath{#2\rangedbldot#1\rangedbldot#3}%
\fi%
}
\begin{document}
\(1{:}2\)
\(\range{1}{2}\)
\(a_{\range{1}{2}}\)
\end{document}
答案3
\text
我会使用字体更改,但如果您想缩放,它比直接使用 mathpalette更容易使用。
\documentclass{article}
\usepackage{graphicx,amsmath,bm}
\makeatletter
\newcommand{\range}[3][\@gobble]{%
\ensuremath{#2\rangedbldot#1\rangedbldot#3}%
}
\makeatother
\begin{document}
\begin{minipage}{.2\textwidth}
\def\rangedbldot{\scalebox{1.4}{:}}
\(1{:}2\)
\(\range{1}{2}\)
\(a_{\range{1}{2}}\)
\end{minipage}
\begin{minipage}{.2\textwidth}
\def\rangedbldot{{\bm{:}}}
\(1{:}2\)
\(\range{1}{2}\)
\(a_{\range{1}{2}}\)
\end{minipage}
\begin{minipage}{.2\textwidth}
\def\rangedbldot{\text{\scalebox{1.4}{:}}}
\(1{:}2\)
\(\range{1}{2}\)
\(a_{\range{1}{2}}\)
\end{minipage}
\end{document}