如何缩放 mathrel 来匹配当前上下文的字体大小?

如何缩放 mathrel 来匹配当前上下文的字体大小?

修改后的问题:

我正在使用 TikZ 重新设计\rightarrowLucida Bright 字体,以更好地匹配tikzcd箭头。如何缩放 mathrel 以适应脚本和脚本脚本样式(以及使缩放对封闭的 、 等命令敏感\large\tiny

使用lucidascalelucidasmallscale选项lucidabr.sty(或lucimatx.sty),缩放是非线性的。

最初我认为我应该根据文档类的字体大小选项(或其默认值)来确定缩放因子。Phelype Oleinik 的回答显示了如何获取文档类的字体大小。

然而,正如大卫·卡莱尔所指出的,这种方法对于实现我的实际目标来说既不是必要的也不是充分的。

原始问题:对于正在使用的文档类,是否有办法通过 TeX 或 LaTeX 代码确定声明的字体大小选项是什么,或者在没有用户声明的选项的情况下,默认字体大小是什么?

我希望这个字体大小只是一个整数(例如,,,12)和1110不是作为实际维度,例如12.0 pt

具体来说,是否可以使用articlememoir文档类来做到这一点?

答案1

对于所述用例,了解 documentclass 选项似乎并不是那么有用,因为您需要知道当前大小的数学字体大小,更像这样的东西,它给出了当前三种数学字体大小的 x 高度。

在此处输入图片描述

\documentclass{article}

\def\zz{\mbox{ex-height  is
 text:  \the\fontdimen5\textfont2\ 
 script:  \the\fontdimen5\scriptfont2\ 
 scriptscript:  \the\fontdimen5\scriptscriptfont2
}}
\begin{document}

$\zz$

{\large $\zz$}

{\tiny $\zz$}


\end{document}

或者同样缩放箭头:

在此处输入图片描述

\documentclass{article}

\usepackage[T1]{fontenc}
\usepackage{graphicx}


\newbox\zzarrowbox
\sbox\zzarrowbox{\mbox{-->>}}% draw with tikz if you prefer...

\newcommand\zzarrow{\mathrel{%
\mathchoice
{\resizebox{!}{\the\fontdimen5\textfont2}{\usebox\zzarrowbox}}%
{\resizebox{!}{\the\fontdimen5\textfont2}{\usebox\zzarrowbox}}%
{\resizebox{!}{\the\fontdimen5\scriptfont2}{\usebox\zzarrowbox}}%
{\resizebox{!}{\the\fontdimen5\scriptscriptfont2}{\usebox\zzarrowbox}}%
}}
\begin{document}

$a\zzarrow b  X_{a\zzarrow b}$

{\large $a\zzarrow b  X_{a\zzarrow b}$}

{\tiny $a\zzarrow b  X_{a\zzarrow b}$}


\end{document}

答案2

这和我的原理是一样的其他答案,但这里我使用了expl3\token_if_dim_register:NTF\token_if_int_register:NTF\token_if_macro:NTF来相应地设置 的参数\classfontsize。如果参数是 dimen 寄存器,则设置的值是字体大小( 中使用的选项\documentclass,而不是实际字体大小)作为 TeX 尺寸。如果参数是 count 寄存器,则该值将存储为整数,如果它是另一个控制序列,则该值也将存储为选项的整数表示。

请注意,中使用的字体大小\documentclass纯粹是象征性的!字体的实际大小不一定(也几乎不可能)与类选项匹配。例如,11pt选项加载10.95pt字体。

使用 as\classfontsize<count register>\classfontsize<dimen register>\classfontsize<control sequence>

在此处输入图片描述

\documentclass[14pt]{memoir}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand \classfontsize { m }
  { \murray_def_class_font_size:N #1 }
\cs_new_protected:Npn \murray_def_class_font_size:N #1
  {
    \token_if_dim_register:NTF #1
      { \__murray_class_size:NNn \dim_set:Nn #1 { pt } }
      {
        \token_if_int_register:NTF #1
          { \__murray_class_size:NNn \int_set:Nn #1 { } }
          {
            \token_if_macro:NTF #1
              { \__murray_class_size:NNn \cs_set:Npx #1 { } }
              {
                \cs_if_exist:NTF #1
                  { \msg_error:nnn { murray } { invalid-token } {#1} }
                  { \__murray_class_size:NNn \cs_set:Npx #1 { } }
              }
          }
      }
  }
\msg_new:nnn { murray } { invalid-token }
  { Token~#1 invalid~for~assignment~\msg_line_context:.}
\cs_new_protected:Npn \__murray_class_size:NNn #1 #2 #3
  { #1 #2 { \__murray_get_class_size_int: #3 } }
\cs_new:Npn \__murray_get_class_size_int:
  {
    \cs_if_exist:cTF { [email protected] } \__murray_get_beamer_size:
      {
        \cs_if_exist:cTF { [email protected] } \__murray_get_memoir_size:
          {
            \cs_if_exist:cTF { [email protected] } \__murray_get_extarticle_size:
              { \__murray_get_standard_size: }
          }
      }
  }
\makeatletter
\cs_new:Npn \__murray_get_beamer_size:
  { \exp_args:NNNo \exp_args:No \__murray_get_beamer_size_aux:w \use:n \beamer@size }
\cs_new:Npn \__murray_get_beamer_size_aux:w size#1.clo {#1}
\cs_new:Npn \__murray_get_memoir_size: { \@memptsize }
\cs_new:Npn \__murray_get_extarticle_size: { \@ptsize }
\cs_new:Npn \__murray_get_standard_size: { 1 \@ptsize }
\makeatother
\ExplSyntaxOff
\begin{document}
\newdimen\dimfontsize
\classfontsize\dimfontsize
Length: \the\dimfontsize

\newcount\intfontsize
\classfontsize\intfontsize
Integer: \the\intfontsize

\classfontsize\csfontsize
Macro: \csfontsize
\end{document}

并且根据要求,提供一个不带宏的纯宏版本expl3

\documentclass[14pt]{extarticle}
\makeatletter
\newcommand{\deffontsize}[1]{%
  \edef#1%
    {%
      \vincent@ifclassloaded {beamer}
        \get@beamersize
        {%
          \vincent@ifclassloaded {memoir}
            \get@memoirsize
            {%
              \vincent@ifclassloaded {extarticle}
                \get@extartsize
                \get@standardsize
            }%
        }%
    }%
}
\def\vincent@ifclassloaded#1{%
  \expandafter\ifx\csname ver@#1.cls\endcsname\relax
    \expandafter\@secondoftwo
  \else
    \expandafter\@firstoftwo
  \fi}
\def\get@beamersize{%
  \expandafter\expandafter\expandafter\get@@beamersize
  \expandafter\@firstofone\beamer@size}
\def\get@@beamersize size#1.clo{#1}
\def\get@memoirsize{\@memptsize}
\def\get@extartsize{\@ptsize}
\def\get@standardsize{1\@ptsize}
\makeatother
\begin{document}
\deffontsize\mainfontsize
\mainfontsize
\end{document}

相关内容