根据运算符的参数改变其大小?

根据运算符的参数改变其大小?

我正在尝试使用拉普拉斯变换符号作为运算符,到目前为止看起来不错,但我希望它与它所使用的参数大小相同,因此如果参数有一行,则拉普拉斯变换将与一行具有相同的高度,并且如果参数是具有两行的分数,则放大运算符的符号。

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}

KPMath 示例

答案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}

在此处输入图片描述

相关内容