Hintergrund: In polynom.sty gibt es den \polyremainder, der Rest ist z.B. 3 oder -8. Für [Wie lasse ich mir nur das Ergebnis einer Polynomdivision anzeigen?] dachte ich, man könnte den \polyremainder darauf testen, ober er positiv oder negativ ist. polynom.sty ist sehr professionell geschrieben, für mich schwierig zu verstehen. Es wäre so schön einfach gewesen,wenn sie einen Schalter \polyset{calc=false} eingebaut hätten-haben sie aber nicht
Jetzt muss man sich den Kram kompliziert zusammenbasteln. So oder so müsste eine Zeichentestmethode vermutlich sehr professionell sein, wenn die rausfinden soll, das \polyprint{\polyremainder} ein Minus dran hat, wenn der \polyremainder-8 ist. Insofern glaube ich, dass dieser Ansatz eh keine gute Idee ist. Die Lösung steht eher in der Paketdatei polynom.sty aber die ist für mich eben kompliziert zu verstehen.
Wenn es sich bei dem Ergebnis garantiert um eine Ganzzahl handelt, kannst du auch ganz einfach mit \ifnum#1<0 testen. Bei einer Gleitpunktzahl kannst du mit \ifdim#1pt<0pt das Gleiche machen.
An sich nein (der Rest kann auch rational sein), ich glaube aber, dass polyprint{polyremainder}(=> z.B.-8) eh keine "Zahl" ist; vll. ein String, ich kenne mich zu wenig aus... Andererseits glaube ich, dass diese Art des Testens, beim genannten Problem im Link, eh Schmarn ist. An sich enthältpolynom.sty` alles Nötige, möchte aber das Ergebnis einer Polynomdivision nur in Verbindung mit der Rechnung ausgeben. Ich schaffe es nicht, das reine Ergebnis aus der Paketdatei herauszufiltern... :(
Ach die relevanten Stellen, die Kommandos oder so, finde sogar ich schnell. Auch habe ich bei tex.stackexchange kleinere Manipulationen gesehen. Bloß mein Problem bekomme ich nicht gelöst. :(
Also, wenn es nicht expandierbar sein muss, kannst du dir ein temporäres Macro definieren und damit testen:
Zunächst brauchen wir eine Art, wie wir testen können, ob ein bestimmter Token in einer Zeichenfolge vorkommt, das Folgende implementiert einen solchen Test für den Token a:
Der Test funktioniert folgendermaßen: Das Macro \tokentest@a liest in seinem ersten Argument alles, bis zu einem a, das zweite Argument ist alles bis zum \endtokentest@a (statt dieses (nicht definierten) Kontrollwortes kannst du auch jede beliebige andere, extrem unwahrscheinliche Zeichenfolge verwenden). Durch den Aufruf, in dem immer ein a direkt vor \endtokentest@a definiert wird, ist das zweite Argument leer, wenn das erste kein a enthält. Der Test \if\relax\detokenize{#2}\relax ist ein expandierbarer und sicherer Test auf ein leeres Argument.
Nun brauchen wir das Ganze aber ein wenig dynamischer, da das erste Argument ja angeben soll, auf welche Zeichen geprüft wird. Also definieren wir uns ein Macro, das ein Testmacro wie oben definiert. Wir geben auch direkt vor, was in welchem Fall jeweils passieren soll:
Das Macro nimmt als Argument diejenige Zeichenfolge, auf die geprüft werden soll. Wir benötigen nur eine Aktion für den Fall, dass das Zeichen vorkommt, in welchem wir ein Hilfsmacro \ifexists@if zu \iftrue werden lassen (der andere Fall ist somit implizit abgedeckt, eben wenn \ifexists@if nicht \iftrue entspricht).
Zusätzlich definieren wir uns noch ein Macro, das uns den Test ein wenig vereinfacht (wir benötigen es später, weil wir Argument 1 expandieren müssen):
Schließlich noch das eigentliche Macro, welches über die angegebenen gesuchten Zeichen iteriert und für jedes den Test durchführt. Hierfür verwende ich \@for aus dem LaTeX-Kernel.
Das Macro ignoriert Leerzeichen nach seinem zweiten Argument. Du kannst mit dem Macro nicht auf ein Komma im String prüfen, da sich das nicht mit der Syntax von \@for vertragen würde.
In beiden Fällen (Verwendung von expl3 und mein Stümpermacro) lässt sich die gesuchte Zeichenfolge durch geschweifte Klammern verstecken. Der Test \ifexists{a} in {{a}bc} würde also das a nicht finden.
Elementar ist es mit expl3. Warum willst du dir das Leben schwer machen, indem du auf solche Tools verzichtest?
Ich habe ein paar Lösungen hier gefunden:
https://tex.stackexchange.com/questions/26870/check-if-a-string-contains-a-given-character
Sie beantworten vermutlich die Frage im allgemeinen - kann man im Grunde hier schließen. Helfen mir leider bei meinem speziellen Problem nicht weiter.
Testen, ob das Zeichen im Mathemodus oder nicht verwendet wird, könnte allerdings ein wenig haariger werden...
Hintergrund: In
polynom.sty
gibt es den\polyremainder
, der Rest ist z.B.3
oder-8
. Für [Wie lasse ich mir nur das Ergebnis einer Polynomdivision anzeigen?] dachte ich, man könnte den\polyremainder
darauf testen, ober er positiv oder negativ ist.polynom.sty
ist sehr professionell geschrieben, für mich schwierig zu verstehen. Es wäre so schön einfach gewesen,wenn sie einen Schalter\polyset{calc=false}
eingebaut hätten-haben sie aber nichtJetzt muss man sich den Kram kompliziert zusammenbasteln. So oder so müsste eine Zeichentestmethode vermutlich sehr professionell sein, wenn die rausfinden soll, das
\polyprint{\polyremainder}
ein Minus dran hat, wenn der\polyremainder
-8
ist. Insofern glaube ich, dass dieser Ansatz eh keine gute Idee ist. Die Lösung steht eher in der Paketdateipolynom.sty
aber die ist für mich eben kompliziert zu verstehen.Wenn es sich bei dem Ergebnis garantiert um eine Ganzzahl handelt, kannst du auch ganz einfach mit
\ifnum#1<0
testen. Bei einer Gleitpunktzahl kannst du mit\ifdim#1pt<0pt
das Gleiche machen.An sich nein (der Rest kann auch rational sein), ich glaube aber, dass polyprint{polyremainder}
(=> z.B.
-8) eh keine "Zahl" ist; vll. ein String, ich kenne mich zu wenig aus... Andererseits glaube ich, dass diese Art des Testens, beim genannten Problem im Link, eh Schmarn ist. An sich enthält
polynom.sty` alles Nötige, möchte aber das Ergebnis einer Polynomdivision nur in Verbindung mit der Rechnung ausgeben. Ich schaffe es nicht, das reine Ergebnis aus der Paketdatei herauszufiltern... :(PS: @Skillmon Du hast nicht zufällig Lust, mal in
polynom.sty
zu schauen? Das liest doch Du wie ein Roman... ;)@cis das sind über 1700 Zeilen Code. Ich glaube, du überschätzt meine Fähigkeiten.
Ach die relevanten Stellen, die Kommandos oder so, finde sogar ich schnell. Auch habe ich bei
tex.stackexchange
kleinere Manipulationen gesehen. Bloß mein Problem bekomme ich nicht gelöst. :(