Identificar y escribir el tamaño de fuente.

Identificar y escribir el tamaño de fuente.

Estoy intentando identificar si el tamaño de fuente actual es small. Así que aquí hay un MWE de lo que estoy tratando de hacer.

\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}

Bueno, mi resultado deseado sería algo como

salida del tamaño de fuente

pero de alguna manera {\small \f@size}no se "expande" como un número, que en realidad lo es. Gracias por la ayuda. :)

Respuesta1

¿Es esto lo que tienes en mente? La \definesizecommandmacro es capaz de definir un comando que se comporta de manera diferente en los distintos tamaños. Este comando también puede tener argumentos, como se muestra en \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}

ingrese la descripción de la imagen aquí

Una versión diferente sin cargar relsize, pero explotando \@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}

Respuesta2

Solo haría una consulta \@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}

ingrese la descripción de la imagen aquí

Respuesta3

{\small \f@size}no es un número. Es mejor que primero guardes el valor f@size:

\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}

Respuesta4

Guardé el tamaño \f@sizede fuente \smallprimero (antes \begin{document}) y lo uso \ifthenelse{...}para compararlo con el tamaño actual.

\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}

ingrese la descripción de la imagen aquí

información relacionada