我想要一个宏,它接受一个参数,使该参数变为粗体,围绕其中心旋转 -90 度,并根据使用位置自动将其缩放到正确的字体大小。该宏将专门用于数学模式。
从 MWE 的输出中可以看出,使用该\rot{0}
命令的下标字体大小太大。我该如何修复此问题以获取正确的字体大小?
平均能量损失
\documentclass{article}
\usepackage{amsmath,graphicx}
\newcommand{\std}[1]{\mathbf{#1}}
\newcommand{\rot}[1]{\mathbin{\rotatebox[origin=c]{-90}{$\mathbf{#1}$}}}
\begin{document}%
$\std{0}, ~ \rot{0}, ~ x_\std{0}, ~ x_{\rot{0}}$
\end{document}%
输出 MWE
答案1
在这种情况下,使用如下方法会容易得多\text
:
\documentclass{article}
\usepackage{amsmath,graphicx}
\newcommand{\rot}[1]{%
\text{\rotatebox[origin=c]{-90}{$\mathbf{#1}$}}%
}
\begin{document}
$\rot{0}, x_{\rot{0}}$
$\rot{1}, x_{\rot{1}}$
$\rot{8}, x_{\rot{8}}$
\end{document}
这\mathpalette
以一种用户友好的方式隐藏。
一个可能的改进是
\newcommand{\rot}[1]{%
\text{%
\setlength{\mathsurround}{0pt}%
\rotatebox[origin=c]{-90}{$\mathbf{#1}$}%
}%
}
如果某些文档类设置了数学环绕参数,以确保安全。
更简短的是
\makeatletter
\newcommand{\rot}[1]{%
\text{\m@th\rotatebox[origin=c]{-90}{$\mathbf{#1}$}}%
}
\makeatother
答案2
经过进一步搜索,我发现这个帖子,详细说明了应该如何做。我不得不\rot
将的定义改为
\newcommand{\rot}[1]{{\mathpalette{\rott{#1}}\relax}}
\newcommand{\rott}[3]{\rotatebox[origin = c]{-90}{$#2\mathbf{#1}$}}
现在它似乎可以正常工作了。
答案3
这可以通过使用包\ThisStyle{...\SavedStyle...}
的功能简单地实现scalerel
。
\documentclass{article}
\usepackage{amsmath,graphicx,scalerel}
\newcommand{\std}[1]{\mathbf{#1}}
\newcommand{\rot}[1]{\ThisStyle{\mathbin{\rotatebox[origin=c]{-90}{$\SavedStyle\mathbf{#1}$}}}}
\begin{document}%
$\std{0}, ~ \rot{0}, ~ x_\std{0}, ~ x_{\rot{0}}$
\end{document}%