Aufrechter fetter griechischer Buchstabe mit Bedingung im Mathematikmodus

Aufrechter fetter griechischer Buchstabe mit Bedingung im Mathematikmodus

Guten Tag!

Ich habe den ganzen Stackechange gegoogelt, konnte aber keine Antwort finden. Ich bin ziemlich neu bei Latex, daher ist mein Ansatz nicht richtig. Ich versuche, ein Makro zu definieren, das griechische Buchstaben formatieren soll alsaufrecht fett. Ich weiß, dass es mehrere Möglichkeiten gibt, dies zu tun, ich möchte die Verwendung von Isomath vermeiden und mich anAbonnierenPaket.

Ich möchte schreiben können

\gb{\alpha}
\gb{\Alpha}

und in beiden Fällen erhält man aufrecht stehende fette Zeichen. Hier ist also mein Code darin:

\newcommand{\gb}[1]{ % Imagine #1=\Psi
\StrGobbleLeft{\detokenize{#1}}{1}[\chrcodet] % variable "\Psi"
\StrGobbleRight{\chrcodet}{1}[\chrcode] % variable "Psi"
\StrLeft{\chrcode}{1}[\chrfirst] % first character "P"
\IfSubStr{ABCDEFGHIJKLMNOPQRSTUVWXYZ}{\chrfirst} % Is it capital?
    {\boldsymbol{#1}} % Yes - no modification
    {\boldsymbol{\csname up\chrcode\endcsname}} % No - glue \up+Psi (that what happens!)
}

Ich versuche, das erste Zeichen der Steuersequenz abzurufen. Wenn es ein Großbuchstabe ist, rufe ich es einfach \boldsymbolohne Änderungen auf. Andernfalls möchte ich die Steuersequenz ändern, indem ich sie \upan den Anfang stelle. Wenn ich das mache, wird der folgende Fehler angezeigt

! Undefined control sequence.
\bm@command ->\upPsi

Es sieht so aus, als ob die "if"-Bedingung immer "false" ergibt, d. h. "P" wird nicht als Großbuchstabe erkannt, daher wird das folgende MWE zweimal "klein" schreiben:

\documentclass{article}
\usepackage{bm,upgreek}
\usepackage{etoolbox}
\usepackage{xstring}

\newcommand{\gb}[1]{
    \StrGobbleLeft{\detokenize{#1}}{1}[\chrcodet]
    \StrGobbleRight{\chrcodet}{1}[\chrcode]
    \StrLeft{\chrcode}{1}[\chrfirst]
    #1 - \IfSubStr{ABCDEFGHIJKLMNOPQRSTUVWXYZ}{\chrfirst}{uppercase}{lowercase}
}

\begin{document}

\begin{equation}
    \psi,\Psi,\gb{\psi},\gb{\Psi}
\end{equation}

\end{document}

Kann mir jemand eine Idee geben, warum es nicht wie erwartet funktioniert?

Antwort1

Tut es nicht bmeinfach das, was Sie wollen, ohne weitere Neudefinitionen?

Bildbeschreibung hier eingeben

\documentclass{article}
\usepackage{bm,upgreek}


\begin{document}

\begin{equation}
    \psi, \uppsi, \Psi,\bm{\psi},\bm{\uppsi},\bm{\Psi}
\end{equation}

\end{document}

Antwort2

Großen Dank an David Carlisle!

Es war genau die richtige Idee mit den Catcodes. Aufgrund mangelnder Erfahrung hatte ich keine Ahnung von Catcodes. Bei meinen Versuchen war ich auch verwirrt, als ich versuchteAbonnierenFunktion \ifstrequalzum Vergleichen von normal P(Catcode 11) und detokenisiert P(Catcode 12) und es hat funktioniert! Nachdem ich beschlossen hatte, einen Blick in den Quellcode der Toolbox zu werfen, fand ich dort, dass \detokenizees auf beide Operanden angewendet wurde. Also änderte ich mein Makro auf ähnliche Weise, sodass es jetzt wie erwartet funktioniert.

Makro:

\documentclass{article}

\usepackage{bm,upgreek}
\usepackage{etoolbox}
\usepackage{xstring}

\newcommand{\gb}[1]{
    \StrGobbleLeft{\detokenize{#1}}{1}[\chrcode]
    \StrGobbleRight{\chrcode}{1}[\chrcode]
    \StrLeft{\chrcode}{1}[\chrfirst]
    \edef\tempa{\detokenize{ABCDEFGHIJKLMNOPQRSTUVWXYZ}}
    #1 - no\;detokenize: \IfSubStr{ABCDEFGHIJKLMNOPQRSTUVWXYZ}{\chrfirst}{upper}{lower}, \,
    detokenize\;both: \IfSubStr{\tempa}{\chrfirst}{upper}{lower}, \,
    etoolbox: \expandafter\ifstrequal\expandafter{\chrfirst}{P}{upper}{lower}
}

\begin{document}

\begin{equation}
    \gb{\psi}
\end{equation}

\begin{equation}
    \gb{\Psi}
\end{equation}

\end{document}

Ergebnis: Bildbeschreibung hier eingeben

Vielleicht ist es nicht die beste Lösung und ich glaube auch nicht, dass es für das gestellte Problem effizient ist, aber es war eine nützliche Erfahrung!

verwandte Informationen