修改后的问题:
我正在使用 TikZ 重新设计\rightarrow
Lucida Bright 字体,以更好地匹配tikzcd
箭头。如何缩放 mathrel 以适应脚本和脚本脚本样式(以及使缩放对封闭的 、 等命令敏感\large
)\tiny
。
使用lucidascale
或lucidasmallscale
选项lucidabr.sty
(或lucimatx.sty
),缩放是非线性的。
最初我认为我应该根据文档类的字体大小选项(或其默认值)来确定缩放因子。Phelype Oleinik 的回答显示了如何获取文档类的字体大小。
然而,正如大卫·卡莱尔所指出的,这种方法对于实现我的实际目标来说既不是必要的也不是充分的。
原始问题:对于正在使用的文档类,是否有办法通过 TeX 或 LaTeX 代码确定声明的字体大小选项是什么,或者在没有用户声明的选项的情况下,默认字体大小是什么?
我希望这个字体大小只是一个整数(例如,,,12
)和11
10
不是作为实际维度,例如12.0 pt
。
具体来说,是否可以使用article
和memoir
文档类来做到这一点?
答案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}