goLaTeX - Mein LaTeX-Forum

Mein LaTeX-Forum


Login  | Registrieren
Forum
      Option
[Erweitert]
  • Diese Seite weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Numerische Behandlung von \StrLeft in eigener Umgebung

 

Rolli
Forum-Anfänger
Forum-Anfänger

Beiträge: 27
Anmeldedatum: 15.02.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.04.2017, 00:05     Titel: Numerische Behandlung von \StrLeft in eigener Umgebung
  Antworten mit Zitat      
Hallo liebe Community,
Ich verzweifele gerade mal wieder.

Ich bastele aktuell an einer eigene Umgebung für Multiple-Choice-Fragen. Den Antwortalternativen möchte ich eine 0 (für falsch) bzw. eine 1 (für richtig) voranstellen, also z.B. "0Wasser ist trocken" und "1Wasser ist nass".

Abhängig vom ersten Zeichen möchte ich dann in meiner Umgebung verzweigen, also z.B. in der Musterlösung bei 0 ein rotes Kästchen und bei 1 einen grünen Haken ausgeben.

Im Minimalbeispiel (unten) macht die erste \ifcase ... \fi - Struktur das, was ich möchte - da ist die 0 (bzw. 1) "hart" codiert.

Was ich aber brauche, ist die zweite \ifcase ... \fi - Struktur, welche per \StrLeft{...}{1} das linke Zeichen zurück gibt. Und das bringt einen Fehler.

Die xstring-Paketbeschreibung sagt dazu --- nullkommanichts ---.

Hilfe!!!

Code • Öffne in Overleaf

\documentclass[parskip=half]{scrartcl}
\usepackage{xstring}

\begin{document}
   \newcommand{\MCa}{0Diese erste Antwort a) ist falsch}
   \newcommand{\MCb}{1Diese zweite Antwort b) ist richtig}
   
   Falsch (0) / Wahr (1): \StrLeft{\MCa}{1} \\ % Ergibt korrekterweise 0
   Falsch (0) / Wahr (1): \StrLeft{\MCb}{1} \\ % Ergibt korrekterweise 1
   
   \ifcase 0 % Funktioniert für 0 bzw. 1 wie beabsichtigt
      FALSCH: \StrGobbleLeft{\MCa}{1}
   \or
      RICHTIG: \StrGobbleLeft{\MCa}{1}
   \fi
   
   \ifcase \StrLeft{\MCa}{1} % Ergibt einen Fehler =Missing number, treated as zero.=
      FALSCH: \StrGobbleLeft{\MCa}{1}
   \or
      RICHTIG: \StrGobbleLeft{\MCa}{1}
   \fi  
\end{document}
 


Wer kann helfen?

Gruß Rolli
_________________

Linux ist ein Betriebssystem.
WinDoof ist ein Zustand!
Private Nachricht senden Benutzer-Profile anzeigen

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.04.2017, 07:47     Titel:
  Antworten mit Zitat      
Praktisch sämtliche Funktionen von Paket auf CTANxstring sind nicht voll expandierbar. Das bedeutet, dass \ifcase da keine Zahl zu sehen bekommt, sondern eine Abfolge von Makros, deren Ausgabe dann erst im Output die gewünschte Zeichen ergibt.

In Deinem Fall könntest Du einfach das erste Token aus der ersten Expansion von \MCa etc. abschneiden:
Code • Öffne in Overleaf
\documentclass[parskip=half]{scrartcl}
\usepackage{xstring}

\makeatletter
\newcommand*{\firsttokof}[1]{%
  \expandafter\@firsttokof #1\@nil
}
\newcommand*{\@firsttokof}{}
\def\@firsttokof#1#2\@nil{#1
}
\makeatother

\begin{document}
   \newcommand{\MCa}{0Diese erste Antwort a) ist falsch}
   \newcommand{\MCb}{1Diese zweite Antwort b) ist richtig}
   
   Falsch (0) / Wahr (1): \StrLeft{\MCa}{1} \\ % Ergibt korrekterweise 0
   Falsch (0) / Wahr (1): \StrLeft{\MCb}{1} \\ % Ergibt korrekterweise 1
   
   \ifcase 0 % Funktioniert für 0 bzw. 1 wie beabsichtigt
      FALSCH: \StrGobbleLeft{\MCa}{1}
   \or
      RICHTIG: \StrGobbleLeft{\MCa}{1}
   \fi
   
   \expandafter\ifcase \firsttokof{\MCa}% Ergibt keinen Fehler =Missing number, treated as zero.=
      FALSCH: \StrGobbleLeft{\MCa}{1}
   \or
      RICHTIG: \StrGobbleLeft{\MCa}{1}
   \fi  

   \ifcase 1% Funktioniert für 0 bzw. 1 wie beabsichtigt
      FALSCH: \StrGobbleLeft{\MCb}{1}
   \or
      RICHTIG: \StrGobbleLeft{\MCb}{1}
   \fi
   
   \expandafter\ifcase \firsttokof{\MCb}% Ergibt keinen Fehler =Missing number, treated as zero.=
      FALSCH: \StrGobbleLeft{\MCb}{1}
   \or
      RICHTIG: \StrGobbleLeft{\MCb}{1}
   \fi  

\end{document}

Ohne das \expandafter in der Definition würde \ifcase das gesamte \MCa zu sehen bekommen. Das wäre zwar für die Entscheidung noch korrekt, würde dann aber im Fall von \MCa den Rest des Strings ausgeben.

In Paket auf CTANl3kernel sind übrigens weitergehende Funktionen zum Zerlegen von Tokenlisten und Strings enthalten. Wenn du also derartige Dingen machen willst, könnte es sinnvoll sein, sich damit näher zu beschäftigen.

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.04.2017, 07:52     Titel:
  Antworten mit Zitat      
Warum benutzt Du nicht einfach \IfBeginWith? Es sei auch noch darauf hingewiesen, dass es bereits fertige Pakete für multiple-choice und ähnliche Fragen und Antworten gibt.

u_fischer
Forum-Meister
Forum-Meister

Beiträge: 3401
Anmeldedatum: 22.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.04.2017, 11:29     Titel:
  Antworten mit Zitat      
Die expl3-Befehle sind eigentlich immer expandierbar

Code • Öffne in Overleaf
\documentclass[parskip=half]{scrartcl}
\usepackage{expl3}
\ExplSyntaxOn
 \newcommand\gethead{\tl_head:N}
 \newcommand\gettail  {\tl_tail:N}
\ExplSyntaxOff
\begin{document}
   \newcommand{\MCa}{0Diese erste Antwort a) ist falsch}
   \newcommand{\MCb}{1Diese zweite Antwort b) ist richtig}

   Falsch (0) / Wahr (1): \gethead\MCa \\ % Ergibt korrekterweise 0
   Falsch (0) / Wahr (1): \gethead\MCb\\ % Ergibt korrekterweise 1
   

   \ifcase \gethead\MCa
      FALSCH: \gettail\MCa
   \or
      RICHTIG: \gettail\MCa
   \fi
\end{document}

_________________

Ulrike Fischer
www.troubleshooting-tex.de
Private Nachricht senden Benutzer-Profile anzeigen

Rolli
Forum-Anfänger
Forum-Anfänger

Beiträge: 27
Anmeldedatum: 15.02.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.04.2017, 11:19     Titel:
  Antworten mit Zitat      
Danke Euch!
Habe das Problem gelöst: Ich verwende jetzt eqexam. Das hat leider eine Reihe nicht dokumentierter Funktionen, um Texte in deutscher Sprache auszugeben, aber der Paketersteller Don Story hat mir sofort geantwortet.

Frage: Wie findet man solche Pakete?
_________________

Linux ist ein Betriebssystem.
WinDoof ist ein Zustand!
Private Nachricht senden Benutzer-Profile anzeigen

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.04.2017, 11:36     Titel:
  Antworten mit Zitat      
Pakete finden geht über die Themen im CTAN-Katalog oder als fleißiger Leser der DTK durch die dortige Vorstellung neuer Pakete oder als fleißiger Leser der Mailingliste CTAN-ANN durch die dortigen Meldungen zu Updates und neuen Paketen oder durch fleißiges Lesen von LaTeX-Foren oder …

Neues Thema eröffnen Neue Antwort erstellen



Options and Permissions
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen
.

goLaTeX ist Teil der goForen
goForen.de goMATLAB.de goLaTeX.de goPCB.de


  Impressum | FAQ | goLaTeX RSS Button RSS-Feed

Copyright © 2008 - 2017 goLaTeX.de