![从基线开始的平方根符号](https://linux22.com/image/463268/%E4%BB%8E%E5%9F%BA%E7%BA%BF%E5%BC%80%E5%A7%8B%E7%9A%84%E5%B9%B3%E6%96%B9%E6%A0%B9%E7%AC%A6%E5%8F%B7.png)
当输入平方根符号时,当其下部超出基线时,有时看起来会有点不好看:
\documentclass{standalone}
\begin{document}
The expression \( \sqrt{x} \) is well defined.
\end{document}
我猜想原因是为了与具有降数的开方数(如 y)保持一致(以获得相同的平方根符号高度)。对于某些只有一个开方数而没有升数或降数的内联情况(如 a、n、x、...),我希望有一个命令\smallsqrt
,其最低部分从基线开始,其最高部分(横线)不变,即与正常\sqrt
符号的横线高度相同。
补充及可能的解决方案:
需要说明的是:我并不想\sqrt
在所有情况下都替换原始值。只有在内联模式下,我才希望获得更紧凑的平方根符号。
这里有一个小例子,是我梦想的,用 TikZ 实现的:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
% changed from: https://tex.stackexchange.com/a/680575/263991
\NewDocumentCommand{\smallsqrt}{s O{\,} m}{%
\begin{tikzpicture}[baseline=(A.base)]
\node[inner ysep=2pt, inner xsep=0pt] (A) at (0,0) {\ensuremath{#3}\kern1pt};
\coordinate (tail) at ([yshift=-.5mm]A.north east);
\coordinate (NO) at (A.north east);
\coordinate (NW) at (A.north west);
\coordinate (bottom) at ([shift={(-.12,.07)}]A.south west);
\coordinate (center) at ([xshift=-1.8mm,yshift=.3mm]A.west);
\coordinate (start) at ($(center)+(-.3mm,-.3mm)$);
\coordinate (centerF) at ($(center)+(.1mm,.1mm)$);
\coordinate (bottomF) at ($(bottom)+(.1mm,.1mm)$);
\coordinate (centerM) at ($(center)+(.05mm,.05mm)$);
\coordinate (bottomM) at ($(bottom)+(.05mm,.05mm)$);
\IfBooleanTF{#1}{
\draw[rounded corners=.1pt] (tail)-- (NO) -- (NW) -- (bottom) --(center) node[inner sep=1pt, above left,xshift=1mm]{$\scriptscriptstyle #2$};
}{
\draw[rounded corners=.1pt] (NO) -- (NW) -- (bottom) --(center) node[inner sep=1pt, above left,xshift=1mm]{$\scriptscriptstyle #2$};
}
\draw[line width=0.25pt,rounded corners=.05pt,shorten >=.25pt,line cap=round] (start) -- (centerF) -- (bottomF);
\draw[shorten >=.25pt,shorten <=.25pt,line cap=round] (centerM) -- (bottomM);
\end{tikzpicture}%
}
\begin{document}
The expression \( \sqrt{x}+\smallsqrt{a}+\smallsqrt*{a}+\smallsqrt{b}+\smallsqrt{y}+\smallsqrt{\vphantom{b}y}+\smallsqrt[3]{n}\) is well defined.
\end{document}
我并不真正满意,但我认为对于某些目的来说这是一个很好的解决方案。
(* 版添加了德国学校的尾巴。)
答案1
我尝试过这个但是不太美观:
\documentclass{standalone}
\usepackage{tikz}
% changed from: https://tex.stackexchange.com/a/680575/263991
\NewDocumentCommand{\smallsqrt}{s O{\,} m}{%
\begin{tikzpicture}[baseline=(A.base)]
\node[inner ysep=2pt, inner xsep=1pt] (A) at (0,0) {\ensuremath{#3}};
\draw([yshift=-.5mm]A.north east)--(A.north east)--(A.north west)
--([shift={(-.12,.05)}]A.south west)
--([xshift=-2mm]A.west)
--++({-.034*width("$\scriptscriptstyle #2$")},0)node[inner ysep=1pt, above, midway]{$\scriptscriptstyle #2$};
\begin{scope}
\clip(A.north west)--([shift={(-.12,.05)}]A.south west)--([shift={(-2mm,.2pt)}]A.west)--++(.1,0);
\draw[very thick, line cap=round]([shift={(-.12,.05)}]A.south west)
--([xshift={-2mm}]A.west);
\end{scope}
\end{tikzpicture}%
}
\begin{document}
The expression \( \sqrt{x}\smallsqrt{x}\) is well defined.
\end{document}
额外的小垂直尾翼是德国学校数学的一个惯例。
答案2
您遇到的问题是 TeX 对平方根符号的最小总高度有限制:
从左到右,观察平方根符号的最低部分和最高部分如何都向上移动,而总高度保持不变,即\sqrt
高度增加的参数。
为了实现您的格式化目标,插入由 创建的印刷支柱会很有帮助\vphantom{k}
。
调整后的平方根符号的最低点并不完全在基线上,而是略低于基线。我相信这种差异是可以接受的。
\smallsqrt
注意:如果其参数包含一个或多个带有降部组件的字母(例如g
、j
、p
、q
或),请不要使用y
,除非您还将问题中的字母包裹在\smash[b]{..}
包装器中。
进一步观察,在上面的截图中,\sqrt{T}
和的输出\smallsqrt{T}
是相同的。这是因为如果使用默认的 Computer Modern 数学字体,小写字母k
和大写字母的高度是相同的。如果您的文档使用非默认数学字体,和T
的输出不必相同。\sqrt{T}
\smallsqrt{T}
\documentclass{article} % or some other suitable document class
\newcommand{\smallsqrt}[1]{\sqrt{#1\vphantom{k}}}
\begin{document}
$\sqrt{.} \quad \sqrt{x} \quad \sqrt{t} \quad \sqrt{k}$
$\sqrt{x} \quad \smallsqrt{x} \quad \smallsqrt{T} \quad \sqrt{T}$
\end{document}