Schriftgröße ermitteln und schreiben

Schriftgröße ermitteln und schreiben

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

Ausgabe der Schriftgröße

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

Bildbeschreibung hier eingeben

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}

Bildbeschreibung hier eingeben

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@sizevon \smallvorher 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}

Bildbeschreibung hier eingeben

verwandte Informationen