考虑以下 MWE:
\documentclass[margin=2mm]{standalone}
\usepackage{amsmath,amssymb}
\usepackage{graphics}
\def\myboxmin{\mathop{\raisebox{.15em}{\scalebox{.5}{$\boxminus$}}}}
\begin{document}
$A \myboxmin B$
\end{document}
我想通过两种方式来改善它
- 定义一个
\RescaleSymbol
命令,按照上面的输出方式输入\RescaleSymbol[.5]{\boxminus}
(例如,重新缩放的默认值是.75
) - 如果没有
\raisebox
,重新缩放后的符号将与基线对齐。现在,它必须将要重新缩放的符号的高度(一半)作为值。
我能怎么做?
答案1
您可以将新宏定义为:\newcommand{\RescaleSymbol}[2][<default_optional>]{..}
带有#1
可选参数和#2
强制参数。第一个(可选)参数的默认值写在第二对括号中。使用新命令作为\RescaleSymbol[<scale>]{<symbol>}
或\RescaleSymbol{<symbol>}
带有默认比例 0.75。
\documentclass[margin=2mm]{standalone}
\usepackage{amsmath,amssymb}
\usepackage{graphics}
\newcommand{\RescaleSymbol}[2][.75]{\mathop{\vcenter{\hbox{\scalebox{#1}{$#2$}}}}}
\begin{document}
$A - \RescaleSymbol[.5]{\boxminus} B$
\end{document}
答案2
您可能必须\mathop
将符号相对于公式轴垂直居中,但这仅在参数为\mathop
单个字符时才有效。
该amsmath
包具有内置机制,用于判断一个符号是 还是\mathbin
,\mathrel
用于\underset
和\overset
。
\documentclass{article}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{graphicx}
\makeatletter
\newcommand{\rescalesymbol}[2][0.75]{%
\binrel@{#2}% this makes \binrel@@ to mean \mathbin, \mathrel or empty
\binrel@@{\rescale@symbol{#1}{#2}}%
}
\newcommand{\rescale@symbol}[2]{%
\mathpalette\rescale@@symbol{{#1}{#2}}%
}
\newcommand{\rescale@@symbol}[2]{%
\rescale@@@symbol#1#2%
}
\newcommand{\rescale@@@symbol}[3]{%
% #1=math style, #2=scale factor, #3=symbol
\vcenter{\hbox{\scalebox{#2}{$\m@th#1#3$}}}%
}
\makeatother
\begin{document}
$A \rescalesymbol{\boxminus} B$
$\scriptstyle A \rescalesymbol{\boxminus} B$
$A \rescalesymbol[0.5]{\boxminus} B$
$\scriptstyle A \rescalesymbol[0.5]{\boxminus} B$
$A \rescalesymbol{\pitchfork} B$
$\scriptstyle A \rescalesymbol{\pitchfork} B$
$A \rescalesymbol[0.5]{\pitchfork} B$
$\scriptstyle A \rescalesymbol[0.5]{\pitchfork} B$
\end{document}
如果您想要将符号的类型设置为不同于其标准状态的\mathbin
或\mathrel
,或者您需要完全不同的类型,我建议使用尾随可选参数:
\documentclass{article}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage{xparse}
\makeatletter
\NewDocumentCommand{\rescalesymbol}{O{0.75}mo}{%
\IfNoValueTF{#3}
{%
\binrel@{#2}% this makes \binrel@@ become \mathbin, \mathrel or empty
\binrel@@{\rescale@symbol{#1}{#2}}%
}
{#3\binrel@@{\rescale@symbol{#1}{#2}}}%
}
\newcommand{\rescale@symbol}[2]{%
\mathpalette\rescale@@symbol{{#1}{#2}}%
}
\newcommand{\rescale@@symbol}[2]{%
\rescale@@@symbol#1#2%
}
\newcommand{\rescale@@@symbol}[3]{%
% #1=math style, #2=scale factor, #3=symbol
\vcenter{\hbox{\scalebox{#2}{$\m@th#1#3$}}}%
}
\makeatother
\begin{document}
$A \rescalesymbol{\boxminus} B$
$\scriptstyle A \rescalesymbol{\boxminus} B$
$A \rescalesymbol[0.5]{\boxminus} B$
$\scriptstyle A \rescalesymbol[0.5]{\boxminus} B$
$A \rescalesymbol{\pitchfork} B$
$\scriptstyle A \rescalesymbol{\pitchfork} B$
$A \rescalesymbol[0.5]{\pitchfork}[\mathop] B$
$\scriptstyle A \rescalesymbol[0.5]{\pitchfork}[\mathop] B$
\end{document}