
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
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 \definesizecommand
macro 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}
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
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@size
de fuente \small
primero (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}