NewDocumentCommand für Schriftgröße und -stil

NewDocumentCommand für Schriftgröße und -stil

Ich möchte eins erstellen NewDocumentCommand, das optionale Argumente wie Schriftfarbe (blau, rot), Schriftgröße (12pt, 18pt, vielleicht groß, sehr groß) und Schriftstil (fett, kursiv, vielleicht fett+kursiv) annimmt.Wie richte ich Keyword-Optionen wie Fett und Kursiv ein?

Ich habe den folgenden Code zusammengestellt, basierend auf @egregs Antwort auf338364/xparse-Prozessor-mit-mehreren-Argumenten. Ich konnte Farbe und Schriftgröße zum Laufen bringen, indem ich Farbschlüsselwörter aus dem xcolor-Paket und die Schriftgröße in pt verwendete, aber ich bin mir nicht sicher, wie ich am besten optionale Schlüsselwörter für den Schriftstil festlegen kann (sagen wir bf für fett, it für kursiv). Ich denke vielleicht über eine Konditionierung mit nach \IfValueT, aber bevor ich experimentiere, würde ich mich über Zeiger freuen. Natürlich wäre es schön, wenn dieser Befehl Mathematik übernehmen und Farbe und all das verwenden könnte, aber wenn das zu aufwendig ist, gebe ich mich mit etwas zufrieden, das mit Text funktioniert.

\documentclass{article}
\usepackage{xparse,xcolor}
\usepackage{verbatim}

\ExplSyntaxOn

\keys_define:nn { mystyle }
{
  color .tl_set:N = \l__mystyle_color_tl,
  size  .tl_set:N = \l__mystyle_size_tl,
  skip  .tl_set:N = \l__mystyle_skip_tl,
  color .initial:n = red,
  size  .initial:n = 12pt,
  skip  .initial:n = 14.5pt,
}
\NewDocumentCommand{\stress}{O{}m}
{
  \group_begin:
  \keys_set:nn { mystyle } { #1 }
  \clist_map_inline:nn { #2 }
  {
    \mystyle:VVVn
    \l__mystyle_color_tl
    \l__mystyle_size_tl
    \l__mystyle_skip_tl
    {##1}
  }
  \group_end:
}
\cs_new_protected:Nn \mystyle:nnnn
{
  \color{#1}\fontsize{#2}{#3}\selectfont#4
}
\cs_generate_variant:Nn \mystyle:nnnn { VVV }
\ExplSyntaxOff

\begin{document}

\stress{emphasize this sentence with default values}

\stress[color=green,size=18pt]{emphasize this sentence with custom values}

\stress[color=blue,size=10pt,skip=50pt]{\textit{emphasize this sentence with custom values}}

Could I modify the command to:

\verb|\stress[style=it]{blabla}| to select italic, 

\verb|\stress[style=bf]{blabla}| to select bold,

\verb|\stress[style=bfit]{blabla}| to select bold+italic

or even \verb|\stress[style=bf+it]{blabla}| to combine styles...

\end{document}

(Das Skip-Argument scheint nicht zu funktionieren, aber ich vermute, dass es für jemanden, der weiß, was er tut, leicht zu beheben ist! Vielleicht fehlt eine Art Leave-Modus ...)

Bildbeschreibung hier eingeben

Antwort1

Sie möchten einen .choice:Schlüssel definieren.

\RequirePackage{fix-cm}
\documentclass{article}
\usepackage{xcolor}
\usepackage{verbatim}

\ExplSyntaxOn

\tl_new:N \l__mystyle_style_tl

\keys_define:nn { mystyle }
 {
  color .tl_set:N = \l__mystyle_color_tl,
  size  .tl_set:N = \l__mystyle_size_tl,
  skip  .tl_set:N = \l__mystyle_skip_tl,

  style .choice:,
  style/it .code:n = \tl_set:Nn \l__mystyle_style_tl { \itshape },
  style/bf .code:n = \tl_set:Nn \l__mystyle_style_tl { \bfseries },
  style/bfit .code:n = \tl_set:Nn \l__mystyle_style_tl { \bfseries\itshape },
  style/unknown .code:n = \tl_set:Nn \l__mystyle_style_tl { #1 },

  color .initial:n = red!75,
  size  .initial:n = 12pt,
  skip  .initial:n = 14.5pt,
 }
\NewDocumentCommand{\stress}{O{}m}
 {
  \group_begin:
  \keys_set:nn { mystyle } { #1 }
  \mystyle:VVVVn
    \l__mystyle_color_tl
    \l__mystyle_size_tl
    \l__mystyle_skip_tl
    \l__mystyle_style_tl
    {#2}
  \group_end:
 }
\cs_new_protected:Nn \mystyle:nnnnn
 {
  \leavevmode\color{#1}\fontsize{#2}{#3}#4\selectfont#5
 }
\cs_generate_variant:Nn \mystyle:nnnnn { VVVV }

\ExplSyntaxOff

\begin{document}

\stress{emphasize this sentence with default values}

\stress[color=green!60!red,size=18pt]{emphasize this sentence with custom values}

\stress[color=blue!80,size=10pt,skip=50pt,style=it]{emphasize this sentence with custom values}

\stress[style=it]{blabla}

\stress[style=bf]{blabla}

\stress[style=bfit]{blabla}

\stress[style=\scshape]{blabla}

\end{document}

Die möglichen Kombinationen müssen Sie im Vorfeld definieren, es ist jedoch auch möglich, mit den üblichen Schriftbefehlen etwas für andere Stile auszudrücken.

Ich habe ein „ \leavevmodeVorher“ hinzugefügt \color, um mögliche unerwünschte Effekte zu vermeiden.

Bildbeschreibung hier eingeben

verwandte Informationen