
Ich versuche herauszufinden, ob die aktuelle Schriftgröße small
. Hier ist also ein MWE dessen, was ich versuche zu tun
\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}
Nun, meine gewünschte Ausgabe wäre so etwas wie
aber irgendwie {\small \f@size}
wird es nicht als Zahl „erweitert“, obwohl es das eigentlich ist. Danke für die Hilfe. :)
Antwort1
Ist es das, was Sie meinen? Das \definesizecommand
Makro kann einen Befehl definieren, der sich in den verschiedenen Größen unterschiedlich verhält. Dieser Befehl kann auch Argumente haben, wie in gezeigt \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}
Eine andere Version ohne Laden relsize
, aber mit Ausnutzung von \@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}
Antwort2
Ich würde einfach mal nachfragen \@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}
Antwort3
{\small \f@size}
ist keine Zahl. Sie sollten besser zuerst den f@size-Wert speichern:
\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}
Antwort4
Ich habe die Schriftgröße \f@size
von \small
vorher abgespeichert \begin{document}
und verwende sie \ifthenelse{...}
um diese mit der aktuellen Größe zu vergleichen.
\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}