我正在尝试在 LaTeX 中将分数放在引号中。到目前为止,我有以下内容:
\documentclass{article}
\newcommand*{\mquote}[1]{\text{``\(#1\)''}}
\begin{document}
\[
\frac{f(x)}{g(x)} \implies \mquote{\frac{0}{0}}
\]
\end{document}
不幸的是,这会使报价过低。我怎样才能使它们达到分数的顶部?
答案1
测量要引用的物体;如果高于引用,则将其抬高。
\documentclass{article}
\usepackage{amsmath}
\makeatletter
\newcommand{\mquote}[1]{{\mathpalette\mqu@te{#1}}}
\newcommand{\mqu@te}[2]{%
\sbox0{$\m@th#1\text{``}$}%
\sbox2{$\m@th#1\text{''}$}%
\sbox4{$\m@th#1#2$}%
\ifdim\ht4>\dimexpr\ht0+1pt\relax
\raisebox{\dimexpr\ht4-\height}{\box0}%
#2%
\raisebox{\dimexpr\ht4-\height}{\box2}%
\else
\box0 #2\box2
\fi
}
\makeatother
\begin{document}
\[
\mquote{x} \implies \mquote{\frac{0}{0}} \implies \mquote{A}
\implies \mquote{\frac{\dfrac{x}{x+1}}{\dfrac{y^2}{y+1}}}
\]
\[
\textstyle \mquote{\frac{0}{0}}
\]
\end{document}
一些解释。首先,\mathpalette
在以下问题的答案中解释了\mathpalette 的奥秘所以我不会触及这个话题;只需说在 的代码中\mqu@te
,代表当前样式。我们需要它,因为中的#1
数学排版不同。在同一个宏中,代表要引用的子公式。\displaystyle
\textstyle
#2
工作原理很容易解释。我将引号设置在两个框中,并使用与数学样式相对应的正确字体大小\text
。在临时框寄存器 4 中,我设置要引用的公式,以便我们可以访问其尺寸。然后,代码检查公式的高度是否大于引号的高度(加上 1pt 的小缓冲区),如果是,则将包含引号的框升高子公式的高度减去引号的高度(\ht4-\height
);在此期间,公式被排版。否则,包含引号的框将与它们之间的子公式一起传递。
答案2
这能满足你的需要吗?
\documentclass{article}
\usepackage{amsmath,scalerel}
\newsavebox\tmpbox
\newcommand*{\mquote}[1]{\ThisStyle{\savebox{\tmpbox}{\hbox{$\SavedStyle#1$}}%
\raisebox{\dimexpr\ht\tmpbox-.7\ht\strutbox}{``}\usebox{\tmpbox}%
\raisebox{\dimexpr\ht\tmpbox-.7\ht\strutbox}{''}}}
\begin{document}
\[
\frac{f(x)}{g(x)} \implies \mquote{\frac{0}{0}} \implies \mquote{A}
\implies \mquote{\frac{~\dfrac{x}{x+1}~}{\dfrac{y^2}{y+1}}}
\]
\end{document}