![为什么反向的 R 会被西里尔字母 Ya 取代?](https://linux22.com/image/454354/%E4%B8%BA%E4%BB%80%E4%B9%88%E5%8F%8D%E5%90%91%E7%9A%84%20R%20%E4%BC%9A%E8%A2%AB%E8%A5%BF%E9%87%8C%E5%B0%94%E5%AD%97%E6%AF%8D%20Ya%20%E5%8F%96%E4%BB%A3%EF%BC%9F.png)
我正在考虑使用向后的 R 来表示反射(镜像)操作。虽然我期望 \reflectbox 能够反映字符的几何形状,但不知何故,该字符被西里尔字母 Ya 取代。 \ensuremath{} 解决了这个问题,尽管原因有点神秘。更神秘的是,当我认为 relsize 恢复到数学模式时,什么机制会替换该字符。
\documentclass{article}
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage{relsize}
\begin{document}
\Huge
$R$
$\reflectbox{\ensuremath{R}}$
\\\\\\
$\reflectbox{R}$
$\reflectbox{\protect{R}}$
$\protect{\reflectbox{R}}$
\end{document}
有人能解释一下是什么机制导致倒写的 R 转换为 Ya 吗?
如果您能具体说明为什么使用向后 R_p 来表示平面反射是一个糟糕的想法,则可以获得加分。
谢谢!
答案1
\reflectbox
将其内容放在\hbox
用于操作的文件中,因此其内容位于文本模式;你得到的不是西里尔字母 Ya,而是一个普通的反向 R
\documentclass{article}
\usepackage{graphicx}
\begin{document}
R$\reflectbox{R}$
\end{document}
如果您想要数学模式下的参数,那么您应该使用类似的方法\reflectbox{$...$}
,即使在数学模式下也是如此(这就是为什么您的版本\ensuremath
有效)。
这是数学版本,\reflectbox
其根据数学样式进行缩放并保留间距
\documentclass{article}
\usepackage{graphicx}
\usepackage{amsmath}
\makeatletter
\newcommand*{\mathreflect}[1]{\binrel@{#1}\binrel@@{\mathpalette\math@reflect{#1}}}
\newcommand*{\math@reflect}[2]{\reflectbox{\m@th$#1#2$}}
\makeatother
\begin{document}
$R\mathreflect{R}$
$\scriptstyle P\mathreflect{P}$
$\scriptscriptstyle f\mathreflect{f}$
\end{document}
正如 David 在评论中指出的那样,\protect
这里没有任何用处。在像这里这样的排版环境中,您很幸运,因为它会扩展为\relax
并且不执行任何操作;在其他环境中,它可能会出错\string
或\noexpand
可能会出错。