Bitte nur TeX-Antworten, die sich aus dem TeXbook ableiten lassen. Ich habe mir einen logischen Schalter erstellt, der es ermöglicht, in einem Befehl Anwendungsbereiche anzugeben. Je nach aktuellem Modus entscheidet der Befehl, ob er angewendet werden darf oder nicht. Kann man diesen logischen Schalter verbessern und wenn ja, wie?

Open in writeLaTeX
%texmodes
Anwendungsbereiche f\"ur Befehle definieren.\vskip\baselineskip
\newcount\texmodes
\def\texmode[#1]{\texmodes=#1}
\def\test{
\def\testbefehl{Ausf\"uhren }
\def\fehler{Nicht ausf\"uhrbar }
\ifnum\texmodes=0 \texmodes=0 \fi
\ifnum\texmodes=1 \texmodes=1 \fi
\ifnum\texmodes=2 \texmodes=1 \fi
\ifnum\texmodes=3 \texmodes=0 \fi
\ifnum\texmodes=4 \texmodes=0 \fi
\ifnum\texmodes=0 \testbefehl\vskip\baselineskip\else\fehler\vskip\baselineskip\fi
}
\texmode[0]
Mode=\the\texmodes
\test
\texmode[1]
Mode=\the\texmodes
\test
\texmode[2]
Mode=\the\texmodes
\test
\texmode[3]
Mode=\the\texmodes
\test
\texmode[4]
Mode=\the\texmodes
\test
%texmodes
\bye

gefragt 19 Sep '14, 18:09

ctansearch's gravatar image

ctansearch
(inaktiv)
Akzeptiert: 84%

bearbeitet 22 Sep '14, 04:51

Ijon%20Tichy's gravatar image

Ijon Tichy
4.4k618

\ifcase wäre hier viel kürzer.

(21 Sep '14, 01:01) Henri

Mit \ifcase statt vielen \ifnum.

Open in writeLaTeX
%texmodes
Anwendungsbereiche f\"ur Befehle definieren.\vskip\baselineskip
\newcount\texmodes
\def\texmode[#1]{\texmodes=#1}
\def\test{
  \def\testbefehl{Ausf\"uhren }
  \def\fehler{Nicht ausf\"uhrbar }
  \texmodes=\ifcase\texmodes 0\or 1\or 1\or 0\or 0\fi\relax
  \ifnum\texmodes=0
    \testbefehl\vskip\baselineskip
  \else
    \fehler\vskip\baselineskip
  \fi
}
\texmode[0]
Mode=\the\texmodes
\test
\texmode[1]
Mode=\the\texmodes
\test
\texmode[2]
Mode=\the\texmodes
\test
\texmode[3]
Mode=\the\texmodes
\test
\texmode[4]
Mode=\the\texmodes
\test
%texmodes
\bye

alt text

Permanenter link

beantwortet 21 Sep '14, 12:34

Henri's gravatar image

Henri
10.0k31730

Falls man nicht möchte, dass \texmodes durch den Aufruf von \test verändert wird, weil man danach für einen anderen Zweck den ursprünglichen Modus noch benötigt, geht das auch:

Open in writeLaTeX
% texmodes
Anwendungsbereiche f\"ur Befehle definieren.\vskip\baselineskip
\newcount\texmodes
\def\texmode[#1]{\texmodes=#1}
\def\test{%
  \def\testbefehl{Ausf\"uhren }
  \def\fehler{Nicht ausf\"uhrbar }
  \ifodd\ifcase \texmodes 0 \or 1 \or 1 \or 0 \or 0 \or 1 \fi
    \testbefehl
  \else
    \fehler
  \fi
  \vskip\baselineskip
}
\texmode[0]
Mode=\the\texmodes
\test
\texmode[1]
Mode=\the\texmodes
\test
\texmode[2]
Mode=\the\texmodes
\test
\texmode[3]
Mode=\the\texmodes
\test
\texmode[4]
Mode=\the\texmodes
\test
%texmodes
\bye

Ich verwende in diesem Fall ein Leerzeichen an Stelle von \relax, um dem TeX-Parser das Ende der Zahl zu signalisieren. Das Leerzeichen wird von TeX dabei selbst aus dem Tokenstrom entfernt, da es gerade einen Zahltoken erstellt.

Permanenter link

beantwortet 22 Sep '14, 03:06

Ijon%20Tichy's gravatar image

Ijon Tichy
4.4k618

bearbeitet 22 Sep '14, 03:06

Kurzinfo für die Theoretiker: Ich habe es so gelöst, daß ich innerhalb einer Gruppe am Anfang texmode=x (spezifische Gruppe), am Ende der Gruppe texmode=0 (allgemeine Gruppe) eingebe. Am Ende einer Gruppe wird immer der "offene" Modus 0 geschaltet. Es gibt also Umgebungen, (z.B Tabellen) die sich als Gruppe x definieren, und untergeordnete Befehle, z.B. Fußnoten) die sich als gruppenabhängig definieren. Ein Befehl, der nicht die Bedingung x erfüllt, kann in der Gruppe x nicht ausgeführt werden, in der Gruppe texmode=0 jederzeit. Ifcase (Gruppenmengen) ist noch nicht umgesetzt. Danke bis hier.

(22 Sep '14, 18:45) ctansearch

Forts. Dazu gibt es eine "failnotes"-Funktion, die am Ende jeder Gruppe anzeigt, welche Befehle nicht ausgeführt werden konnten, also am Ende von sections oder am Ende von Tabellen etc. Die Fehlermeldungen werden in der Ausgabedatei aufgeführt.

(22 Sep '14, 18:48) ctansearch
Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs füge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×21
×10

Frage gestellt: 19 Sep '14, 18:09

Frage wurde angeschaut: 2,155 Mal

Zuletzt aktualisiert: 22 Sep '14, 18:48