我正在尝试确定当前字体大小是否为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
答案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}