Ziel: ein Lückentext, der mit dem Package Version zusammenarbeitet.

Mein MWE:

Öffne in Overleaf
\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[german]{babel}
\usepackage[T1]{fontenc}
\usepackage{version}
\usepackage{setspace}

\newlength{\diebox}
\newcommand{\luecke}[1]{
\settowidth{\diebox}{#1}
\if\includeversion{lehrer}{\textbf{#1}}
\fi
\if\includeversion{schueler}{\parbox{2.3\diebox}{\hrulefill}}
\fi}

\includeversion{lehrer}\excludeversion{schueler}
%\includeversion{schueler}\excludeversion{lehrer}
\begin{document}
Warum? \luecke{Darum!}
\end{document}

Problem: er zeigt mir immer beide Versionen an, ich hätte erwartet, dass er mit der Zeile

Öffne in Overleaf
\includeversion{lehrer}\excludeversion{schueler}

nur den Inhalt, also Darum! anzeigt, und mit der umgekehrten, jetzt auskommentierten include/exclude Zeile nur den Strich.

gefragt 20 Mai '17, 09:16

Astrina's gravatar image

Astrina
37171925
Akzeptiert-Rate: 50%

bearbeitet 20 Mai '17, 10:23

cgnieder's gravatar image

cgnieder
22.1k243463


Du kannst nicht mit \if\includeversion{...} testen, welche Version aktiv ist. Stattdessen musst Du – wie es auch in der Doku des version-Pakets steht, entsprechende Umgebungen verwenden:

Öffne in Overleaf
\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}% die nicht mehr ganz so neue Rechtschreibung
\usepackage[T1]{fontenc}
\usepackage{version}
\usepackage{setspace}

\newlength{\diebox}
\newcommand{\luecke}[1]{%
  \settowidth{\diebox}{#1}%
  \begin{lehrer}\textbf{#1}\end{lehrer}%
  \begin{schueler}\rule{2.3\diebox}{1pt}\end{schueler}%
}

% \includeversion{lehrer}\excludeversion{schueler}
\includeversion{schueler}\excludeversion{lehrer}
\begin{document}
Warum? \luecke{Darum!}
\end{document}

Allerdings reicht für das Beispiel ein klassischer \if...-Schalter vollkommen aus:

Öffne in Overleaf
\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}% die nicht mehr ganz so neue Rechtschreibung
\usepackage[T1]{fontenc}

\usepackage{setspace}

\newif\ifloesung

\newlength{\diebox}
\newcommand{\luecke}[1]{%
  \settowidth{\diebox}{#1}%
  \ifloesung
    \textbf{#1}%
  \else
    \rule{2.3\diebox}{1pt}%
  \fi
}

% \loesungtrue

\begin{document}
Warum? \luecke{Darum!}
\end{document}
Permanenter link

beantwortet 20 Mai '17, 10:22

cgnieder's gravatar image

cgnieder
22.1k243463
Akzeptiert-Rate: 60%

2

Sowohl exsheets als auch dessen Nachfolger xsim haben dafür übrigens eingebaute Mechanismen.

(20 Mai '17, 10:28) cgnieder

Danke Clemens, drei Vorschläge, alle super! Deine erste Lösung hatte ich schon, allerdings hat er mir da immer neue Absätze bei neuen Lücken erzeugt. Leider hab ich meine Version schon überschrieben, sonst könnte ich jetzt vergleichen, was ich da anders gemacht habe... schade. Die zweite Lösung mit dem Schalter ist sehr schlank, ich möchte aber nicht noch mehr Schalter in meinem Dokument haben, und das version-package benutze ich sehr ausgiebig. Exsheets und xsim möchte ich nicht benutzen.

(20 Mai '17, 11:10) Astrina

»allerdings hat er mir da immer neue Absätze bei neuen Lücken erzeugt.« – dann hast Du „ihn“ vermutlich mit Leerzeilen gefüttert

(20 Mai '17, 11:11) cgnieder

»ich möchte aber nicht noch mehr Schalter in meinem Dokument haben« – verstehe ich nicht. Im Dokument hast Du doch nur den Befehl \luecke… Aber sei's drum, ist ja nicht mein Dokument ;)

(20 Mai '17, 11:12) cgnieder

Ich dachte, ich hätte alle Leerzeilen rausgenommen, aber ja, vermutlich ;).

Und zu den Schaltern: Mein Dokument ist viiiiiel größer und hat ja schon die Schalter includeversion{lehrer} exclude{schueler}. das Ganze noch mal andersrum, wenn ich meine Schülervariante möchte. Und nachdem alle meine Befehle ausgelagert sind, und ich das in viiiiiielen Dokumenten verwende, möchte ich es nicht immer wieder ändern, bzw. in einem halben Jahr überlegen, warum DIESES Dokument, das ich jetzt das erstemal seit der Änderung öffne, nicht mehr funktioniert.

(20 Mai '17, 11:41) Astrina

In ConTeXt MKIV kann man dafür Modes verwenden. Da sich lehrer und schueler gegenseitig ausschließen würde ich nur einen definieren und prüfen ob er gesetzt ist oder nicht.

Öffne in Overleaf
\define[1]\luecke{%
  \setbox\scratchbox=\hbox{\bold{#1}}%
  \doifmode{lehrer}{\bold{#1}}%
  \doifnotmode{lehrer}{\blackrule[height=1pt,width=\wd\scratchbox]}%
}

\starttext

Warum? \luecke{Darum!}

\enablemode[lehrer]
Warum? \luecke{Darum!}

\stoptext

alt text

Permanenter link

beantwortet 22 Mai '17, 04:02

Henri's gravatar image

Henri
15.7k133943
Akzeptiert-Rate: 46%

Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

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ügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×14
×3
×1

gestellte Frage: 20 Mai '17, 09:16

Frage wurde gesehen: 6,677 Mal

zuletzt geändert: 22 Mai '17, 04:02