识别和书写字体大小

识别和书写字体大小

我正在尝试确定当前字体大小是否为small。因此,这是我正在尝试执行的操作的 MWE

\documentclass{article}
\usepackage{ifthen}
\begin{document}

\makeatletter
\ifthenelse{\f@size = 9}{the size is 9}{the size is not 9}
\makeatother

\makeatletter
\small
\ifthenelse{\f@size = 9}{the size is 9}{the size is not 9}
\makeatother

\makeatletter
\ifthenelse{\f@size = {\small \f@size} }{the size is small}{the size is not small}
\makeatother

\end{document}

我想要的输出是这样的

输出字体大小

但不知何故{\small \f@size}并没有“扩展”为数字,而实际上它是。谢谢帮助。:)

答案1

这是您想要的吗?\definesizecommand宏可以定义一个在不同尺寸下表现不同的命令。此命令还可以包含参数,如 所示\baz

\documentclass{article}
\usepackage{relsize}
\usepackage{xparse}

\ExplSyntaxOn
% relsize builds a list \rs@fontsizes of the form
%   \rs@size\normalfont{10.0pt}\rs@size\small{9.0pt}...
% and we can use it for building a different list

\prop_new:N \g_lbj_size_to_name_prop
\prop_new:N \g_lbj_name_to_size_prop
\group_begin:
\cs_set:cpn { rs@size } #1 #2
 {
  \prop_gput:Nnx \g_lbj_size_to_name_prop { #2 } { \cs_to_str:N #1 }
 }
\use:c { rs@fontsizes }
% this is not used, but could become handy
\cs_set:cpn { rs@size } #1 #2
 {
  \prop_gput:Nnx \g_lbj_name_to_size_prop { \cs_to_str:N #1 } { #2 }
 }
\use:c { rs@fontsizes }
\group_end:

% just print the current size name
\NewDocumentCommand{\currentsizename}{}
 {
  \prop_item:Nf \g_lbj_size_to_name_prop { \dim_eval:n { \use:c {f@size} pt } }
 }
\cs_generate_variant:Nn \prop_item:Nn { Nf }

\NewDocumentCommand{\definesizecommand}{mmmO{}}
 {% #1 is the command to define,
  % #2 is the argument specifier,
  % #3 is the list of actions,
  % #4 is the optional action to do in uncovered cases
  \NewDocumentCommand{#1}{#2}
   {
    \str_case:xnF
     { \prop_item:Nf \g_lbj_size_to_name_prop { \dim_eval:n { \use:c { f@size } pt } } }
     { #3 }
     { #4 }
   }
 }
\cs_generate_variant:Nn \str_case:nnF { x }
\ExplSyntaxOff

\definesizecommand{\foo}{}{
  {normalsize}{normalfoo}
  {small}{smallfoo}
  {tiny}{tinyfoo}
}[extrafoo]

\definesizecommand{\baz}{m}{
  {normalsize}{---#1---}
  {small}{!#1!}
  {tiny}{?#1?}
}[(#1)]

\begin{document}

Here we're in \currentsizename: \foo\ and \baz{x}

\small
Here we're in \currentsizename: \foo\ and \baz{y}

\tiny
Here we're in \currentsizename: \foo\ and \baz{z}

\Large
Here we're in \currentsizename: \foo\ and \baz{A}

\end{document}

在此处输入图片描述

relsize无需加载但可利用的不同版本\@currsize

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn
\cs_new:Nn \lbj_curr_size:
 {
  \__lbj_curr_size:c { @currsize }
 }

\cs_new:Nn \__lbj_curr_size:N
 {
  \exp_after:wN \__lbj_curr_size_aux:NNw #1 \q_stop
 }
\cs_generate_variant:Nn \__lbj_curr_size:N { c }

\cs_new:Npn \__lbj_curr_size_aux:NNw #1 #2 #3 \q_stop
 {
  \tl_if_blank:nTF { #3 }
   {
    \__lbj_curr_size:N #2
   }
   {
    \cs_to_str:N #2
   }
 }

% just print the current size name
\NewDocumentCommand{\currentsizename}{}
 {
  \lbj_curr_size:
 }

\NewDocumentCommand{\definesizecommand}{mmmO{}}
 {% #1 is the command to define,
  % #2 is the argument specifier,
  % #3 is the list of actions,
  % #4 is the optional action to do in uncovered cases
  \NewDocumentCommand{#1}{#2}
   {
    \str_case:fnF
     { \lbj_curr_size: }
     { #3 }
     { #4 }
   }
 }
\cs_generate_variant:Nn \str_case:nnF { f }
\ExplSyntaxOff

\definesizecommand{\foo}{}{
  {normalsize}{normalfoo}
  {small}{smallfoo}
  {tiny}{tinyfoo}
}[extrafoo]

\definesizecommand{\baz}{m}{
  {normalsize}{---#1---}
  {small}{!#1!}
  {tiny}{?#1?}
}[(#1)]

\begin{document}

Here we're in \currentsizename: \foo\ and \baz{x}

\small
Here we're in \currentsizename: \foo\ and \baz{y}

\tiny
Here we're in \currentsizename: \foo\ and \baz{z}

\Large
Here we're in \currentsizename: \foo\ and \baz{A}

\end{document}

答案2

我只是想查询一下\@currsize

\documentclass{article}
\makeatletter
\newcommand\queryfont[3]{%
  \ifx\@currsize#1
    #2%
  \else
    #3%
  \fi
}
\makeatother
\begin{document}
\queryfont\small{This is small}{This is not small}

\small
\queryfont\small{This is small}{This is not small}
\end{document}

在此处输入图片描述

答案3

{\small \f@size}不是数字。您最好先存储 f@size-value:

\documentclass{article}
\usepackage{ifthen}
\begin{document}

\makeatletter
\ifthenelse{\f@size=9}{the size is 9}{the size is not 9}
\makeatother

\makeatletter
\small
\ifthenelse{\f@size=9}{the size is 9}{the size is not 9}
\makeatother

\makeatletter
{\small \xdef\smallfsize{\f@size}}
\ifthenelse{\f@size=\smallfsize}{the size is small}{the size is not small}
\makeatother

\end{document}

答案4

\f@size我已经存储了第一个字体大小\small(之前\begin{document}并用\ifthenelse{...}它来与当前大小进行比较。

\documentclass{article}

\usepackage{xifthen}
\makeatletter
{\small\xdef\smallfontsize{\f@size}}
\makeatother

\begin{document}

\makeatletter

\large

\ifthenelse{\f@size = \smallfontsize }{the size is small}{the size is not small}

\small

\ifthenelse{\f@size = \smallfontsize }{the size is small}{the size is not small}
\makeatother

\end{document}

在此处输入图片描述

相关内容