![强制 \savebox 使用正确模式](https://linux22.com/image/311558/%E5%BC%BA%E5%88%B6%20%5Csavebox%20%E4%BD%BF%E7%94%A8%E6%AD%A3%E7%A1%AE%E6%A8%A1%E5%BC%8F.png)
我发现自己想要使用以下类型的构造:
\newsavebox{\mybox}
\newcommand{\mycommand}[1]{\savebox{\mybox}{#1}\reflectbox{\usebox{\mybox}}}
问题是我希望框的内容以“正确”模式排版。换句话说,如果在数学模式下使用 \mycommand,则 #1 应该自动以数学模式排版。此外,如果在数学模式下在下标内使用 \mycommand,则 #1 应该排版为下标,等等。本质上,如果没有 \reflectbox,\mycommand 应该是完全“透明的”。
答案1
\ThisStyle{...\SavedStyle...}
该包的语法正好scalerel
允许这样做。
在 MWE 中我展示了:文本模式(第 1 行);textstyle 和 displaystyle math(第 2 行);scriptstyle 和 scriptscriptstyle(第 3 行);正常数学和下标的组合效果\mycommand
(第 4 行)。
\documentclass{amsart}
\usepackage{scalerel}
\newsavebox{\mybox}
\newcommand{\mycommand}[1]{%
\ThisStyle{\ifmmode%
\savebox{\mybox}{$\SavedStyle#1$}%
\reflectbox{\usebox{\mybox}}%
\else%
\savebox{\mybox}{#1}%
\reflectbox{\usebox{\mybox}}%
\fi%
}}
\begin{document}
\mycommand{abc}
$\mycommand{\sum_{i=1}^N abc}\quad\displaystyle\mycommand{\sum_{i=1}^N abc} $
$\scriptstyle \mycommand{abc}\quad\scriptscriptstyle \mycommand{abc}$
$Z_{\mycommand{Z}}$
\end{document}