PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme im Umgang mit "FamilyBoolKey"



Odie
09-06-2011, 13:46
Hallo,

gegenwärtig versuche ich, mit Hilfe des Pakets scrbase (KOMAscript), boolsche Schalter mit identischem Namen in verschiedenen Schlüsseln anzulegen.

Beim Abprüfen der Werte, habe ich allerdings keinen Zugriff auf die Schlüssel der Schalter, um einen einzigen davon gezielt abzufragen.

Gegenwärtig sieht mein Vorgehen wiefolgt aus:


%Schalter 1 erstellen
\FamilyBoolKey[FL]{MP}{Application}{@AppTest}
%Schalter 2 erstellen
\FamilyBoolKey[FL]{MP}{Level}{@AppTest}

%Schalter 1 auf TRUE setzen
\FamilySetBool{MP}{Application}{@AppTest}{true}
%Schalter 2 auf TRUE setzen
\FamilySetBool{MP}{Level}{@AppTest}{true}

%Schalter abprüfen
\makeatletter\if@AppTest\makeatother
do something
\fi

Wie unschwer zu erkennen ist, kommt bei meiner Prüfung an keiner Stelle der Schlüssel vor, um die Schalter voneinander zu unterscheiden. Leider habe ich auch keinen Plan, wie ich diese Information in den Test mit reinbekommen soll.

Es wäre prima, wenn mir jemand 'nen Tipp geben könnte, wie das normalerweise geht.
Ich möchte beide Schalter getrennt voneinander abprüfen können, und die Schlüssel verstehe ich bei meinen Überlegungen bisher immer als Namensraum für die Schalter.

u_fischer
09-06-2011, 14:20
Wie unschwer zu erkennen ist

Sagen wir mal so: Es ist das erste Mal, dass ich eine Frage oder eine Nachricht zu diesem Paket sehe – und ich sehe eigentlich ziemlich viele Fragen. Ich habe daher Zweifel, dass dir hier jemand helfen kann, besonders wo du nur einen Codeschnipsel zeigst – ich zumindest habe keine Lust die Dokumentation durchzuarbeiten um rauszufinden, wie man den Schnipsel zu einem geeigneten Testdokument erweitern muss. Auf komascript.de oder golatex.de, wo Markus antwortet, dürften deine Chancen größer sein – aber auch dort solltest du ein vollständiges Beispiel liefern.

Schweinebacke
09-06-2011, 14:49
Ich glaube, Du hast das ganze Paket falsch verstanden. Die Schalter, die man da setzt, mit \FamilySetBool ein- und auszuschalten ist jedenfalls relativ sinnlos. So wie ich das verstehe, benötigt man \FamilySetBool eigentlich nur, wenn man aus irgendwelchen Gründen, einen Schalter nicht mit \FamilyBoolKey definiert, sondern mit \DefineFamilyKey. Ein Grund könnte beispielsweise sein, dass man zu einer Option draft auch eine Option final definieren will und deshalb eine inverse Logik benötigt.

Normalerweise erledigt man das Ein- und Ausschalten per \FamilyOption oder \FamilyOptions. Der Sinn der Familien ist dabei dann, dass man innerhalb einer Familie gleiche Optionen definieren kann, bei denen dann jedes Famillienmitglied auf den entsprechenden Aufruf von \FamilyOption oder \FamilyOptions reagiert.

Du willst anscheinend etwas ganz anderes, nämlich schlicht mehrere boolsche Unterscheidungen für Dein Dokument (oder was auch immer). Das geht einfach per:
\newif\ifMeinErsterSchalter
\newif\ifMeinZweiterSchalter

\MeinErsterSchaltertrue

Mein erster Schalter ist \ifMeinErsterSchalter an\else aus\fi.

Mein zweiter Schalter ist \ifMeinZweiterSchalter an\else aus\fi.Alternative: Siehe Paket ifthen.

Odie
09-06-2011, 16:13
Das was ich will sollte eigentlich ganz simple sein:
Ich möchte wiederkehrende "Variablen" anhand Ihrer Funktion sinnvoll benennen können, um Namenskonflikten aus dem Weg zu gehen.

Normalerweise würde ich dies einfach mit einem Unterstrich oder einem Punkt oder einem anderen auf den ersten Blick erkennbaren Sonderzeichen erledigen.
z.B.

Namensraum1_Parameter1
Namensraum1_Parameter2

Namensraum2_Parameter1
Namensraum2_Parameter2


In LaTeX habe ich diesbezüglich leider noch keine wirklich praktikable Lösung finden können. Die folgende Lösung mit dem "@" würde zwar prinzipiell funktionieren, scheint mir aber in der Anwendung ein wenig unhandlich, da insbesondere das Setzen der Schalter im Quellcode nicht einfach zu sehen ist.


\documentclass{scrartcl}

\begin{document}

\makeatletter
\newif\if@MeinErster@Schalter
\newif\if@MeinZweiter@Schalter

\@MeinErster@Schaltertrue
\@MeinZweiter@Schalterfalse

Mein erster Schalter ist \if@MeinErster@Schalter an\else aus\fi.

Mein zweiter Schalter ist \if@MeinZweiter@Schalter an\else aus\fi.
\makeatother
\end{document}

Das eigentliche Setzen der Schalter mit FamilySetBool{Familie}{Schalter}{Wert} scheint mir da deutlich transparenter.
Leider finde ich jedoch keine Möglichkeit, die so gesetzten Schalter auch gezielt zu prüfen. Also etwas in der Art:

\if@Familie@Schalter

Schweinebacke
10-06-2011, 07:28
Es bestätigt sich für mich, dass Du den falschen Ansatz gewählt hast. Genau für diesen Fall hatte ich eine Alternative vorgeschlagen, die Du leider unbeachtet lässt …