
我正在嘗試確定當前字體大小是否為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}