![根据运算符的参数改变其大小?](https://linux22.com/image/427982/%E6%A0%B9%E6%8D%AE%E8%BF%90%E7%AE%97%E7%AC%A6%E7%9A%84%E5%8F%82%E6%95%B0%E6%94%B9%E5%8F%98%E5%85%B6%E5%A4%A7%E5%B0%8F%EF%BC%9F.png)
我正在尝试使用拉普拉斯变换符号作为运算符,到目前为止看起来不错,但我希望它与它所使用的参数大小相同,因此如果参数有一行,则拉普拉斯变换将与一行具有相同的高度,并且如果参数是具有两行的分数,则放大运算符的符号。
class test2(Scene):
def construct(self):
my_template = TexTemplate()
my_template.add_to_preamble(
r"""
\usepackage{mathrsfs}
\let\RSFSmathscr\mathscr % save the meaning of \mathscr
\usepackage[scr]{rsfso}
\let\RSFSOmathscr\mathscr % save the new meaning of \mathscr
\let\mathscr\RSFSmathscr % restore the previous meaning
\newcommand{\Laplace}{\RSFSOmathscr{L}}
""")
tex = MathTex(r"\Laplace \left \{ \frac{1}{s^2 + 1} \right \}", tex_template=my_template)
这就是我得到的结果
我还想添加参数 t 和 s,类似于 wolfram alpha 的做法,这里是一张图片。
换句话说,最终结果应该是这样的:
我在想也许是这样的?:
\usepackage{mathrsfs}
\let\RSFSmathscr\mathscr
\usepackage[scr]{rsfso}
\let\RSFSOmathscr\mathscr
\let\mathscr\RSFSmathscr
\newcommand{\Laplace}{\RSFSOmathscr{L} _t \left\{ somehow_argument_here \right \} (s) }
答案1
您可以通过将 ℒ 及其参数放入框中并调整其大小来实现此目的。由于您希望能够添加下标,因此我将其设为可选参数。
\documentclass{article}
\tracinglostchars=2
\usepackage[paperwidth=10cm]{geometry} % To format the MWE for Tex.SX
\usepackage{iftex} % For \iftutex
\usepackage{settobox} % For \settoboxheight
\usepackage{graphicx} % For \resizebox
\iftutex
\usepackage{newcomputermodern} % For example
%% By default, \mathscr duplicates \mathcal. You wanted a symbol like
%% Boondoxo, which is available as a stylistic set in the STIX fonts.
\setmathfont{STIX Two Math}[
Scale=MatchUppercase,
StylisticSet=1,
range={scr, bfscr}]
\else
\usepackage{lmodern} % For example
\usepackage{amsmath}
\usepackage[scr=boondoxo]{mathalpha}
\fi
\newlength{\LaplaceHeight}
\newbox{\LaplaceArg}
\newcommand\Laplace[2][]{%
\savebox{\LaplaceArg}{\(#2\)}%
\settoboxheight{\LaplaceHeight}{\LaplaceArg}%
\mathop{\resizebox{!}{\LaplaceHeight}{$\mathscr{L}$}}\nolimits_{#1} \usebox{\LaplaceArg}%
}
\begin{document}
\[ \Laplace{\sin t}(s) \]
\[ \Laplace[t]{\left\{ \frac{1}{t+1} \right\} }(s) \]
\end{document}
此版本仅匹配高度而不匹配深度。要更紧密地匹配您的插图,但低于基线,您可以改为调整大小为参数的总高度并降低其深度:
\documentclass{article}
\tracinglostchars=2
\usepackage[paperwidth=10cm]{geometry} % To format the MWE for Tex.SX
\usepackage{iftex} % For \iftutex
\usepackage{settobox} % For \settoboxtotalheight, \settoboxdepth
\usepackage{graphicx} % For \resizebox
\iftutex
\usepackage{newcomputermodern} % For example
%% By default, \mathscr duplicates \mathcal. You wanted a symbol like
%% Boondoxo, which is available as a stylistic set in the STIX fonts.
\setmathfont{STIX Two Math}[
Scale=MatchUppercase,
StylisticSet=1,
range={scr, bfscr}]
\else
\usepackage{lmodern} % For example
\usepackage{amsmath}
\usepackage[scr=boondoxo]{mathalpha}
\fi
\newlength{\LaplaceHeight}
\newlength{\LaplaceDepth}
\newbox{\LaplaceArg}
\newcommand\Laplace[2][]{%
\savebox{\LaplaceArg}{\(#2\)}%
\settoboxtotalheight{\LaplaceHeight}{\LaplaceArg}%
\settoboxdepth{\LaplaceDepth}{\LaplaceArg}%
\mathop{\raisebox{-\LaplaceDepth}{\resizebox{!}{\LaplaceHeight}{$\mathscr{L}$}}}\nolimits_{#1} \usebox{\LaplaceArg}%
}
\begin{document}
\[ \Laplace{\sin t}(s) \]
\[ \Laplace[t]{\lef
正如评论中提到的那样,缩放 ℒ 会使其看起来太重。您可能只沿垂直轴缩放它,但这看起来也不好。
这里有另一种您可能更喜欢的替代方案,它定义了一个正常大小\laplace
和一个双倍大小\Laplace
,从字体系列的较轻重量中放大后者。它需要 LuaLaTeX 或 XeLaTeX。
\documentclass{article}
\tracinglostchars=2
\usepackage{newcomputermodern} % For example
\setmathfont{KPMath-Regular}[ Scale=MatchUppercase, range={scr,bfscr}]
\setmathfontface\bigmath{KPMath-Light}[Scale=2.0]
\newcommand\laplace{\mathop{\mathscr{L}}\nolimits}
\newcommand\Laplace{\mathop{\bigmath{ℒ}}\nolimits}
\begin{document}
\[ \laplace{\sin t}(s) \]
\[ \Laplace_t {\left\{ \frac{1}{t+1} \right\} }(s) \]
\end{document}
答案2
看起来下面的代码可能会达到你的目标:
\documentclass{article}
\usepackage[scr]{rsfso}
\usepackage{amsmath}
\newcommand{\Laplace}[1]{\mathop{}\!\mathscr{L}_t\!\left\{#1\right\}\!}
\begin{document}
You can write
\[
\Laplace{\sin t}(s)
\quad\text{and}\quad
\Laplace{\frac{1}{t+1}}(s).
\]
Let's leave ``$(s)$'' out of the definition, so you can write
\[
\Laplace{\exp(-t)}(s)=\frac{1}{s+1}
\quad\text{and}\quad
\Laplace{\exp(-t)}(x)=\frac{1}{x+1}.
\]
You can even write some savvy convolution:
\[
\Laplace{(f\ast g)(t)}(s)=\Laplace{f(t)}(s)\Laplace{g(t)}(s),
\]
where $\ast$~is the convolution symbol defined as
\[
(f\ast g)(t)=\int f(x) g(t-x) \, dx.
\]
\end{document}
最开始的\mathop{}\!
负责处理间距(当您编写拉普拉斯变换的乘积时,它会增加一小段空间来分隔项)。如果您不喜欢它,可以将其删除。另外两个\!
取消 周围的多余空格\left\{...\right\}
。
答案3
该\scalerel
宏采用其第一个参数,并将其缩放到第二个参数的垂直覆盖范围,在数学模式下工作。需要进行的调整是_t
从缩放计算中排除,并具有缩放覆盖范围的最小尺寸,在本例中为 cap 的尺寸X
。
\documentclass{article}
\usepackage{mathrsfs}
\let\RSFSmathscr\mathscr
\usepackage[scr]{rsfso}
\let\RSFSOmathscr\mathscr
\let\mathscr\RSFSmathscr
\newcommand{\Laplace}[1]{\scalerel{\RSFSOmathscr{L}
\smash{_t}}{\vphantom{X}#1} (s) }
\usepackage{scalerel}
\begin{document}
\[
\Laplace{\sin t}
\]
\[
\Laplace{\left\{\frac{1}{t^2+1}\right\}}
\]
\end{document}
补充
我认为,原帖作者问的是,在第二种情况下,拉普拉斯算子的大小是否可以更小,也许是参数高度的一小部分,而不是参数的整个高度。在这里,我将其设为参数高度的 0.6 倍,最小尺寸对应于大写字母的大小X
。
\documentclass{article}
\usepackage{mathrsfs}
\let\RSFSmathscr\mathscr
\usepackage[scr]{rsfso}
\let\RSFSOmathscr\mathscr
\let\mathscr\RSFSmathscr
\newcommand{\Laplace}[1]{\ThisStyle{
\sbox0{$\SavedStyle#1$}
\ht0=.6\ht0
\dp0=.6\dp0
\scalerel{\RSFSOmathscr{L}
\smash{_t}}{\vphantom{X\box0}}#1 (s)}}
\usepackage{scalerel}
\begin{document}
\[
\Laplace{\sin t}
\]
\[
\Laplace{\left\{\frac{1}{t^2+1}\right\}}
\]
\end{document}