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, 03:16

Astrina's gravatar image

Astrina
34111222
Akzeptiert: 94%

bearbeitet 20 Mai, 04:23

Clemens's gravatar image

Clemens
20.1k123360


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, 04:22

Clemens's gravatar image

Clemens
20.1k123360

2

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

(20 Mai, 04:28) Clemens

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, 05: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, 05:11) Clemens

»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, 05:12) Clemens

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, 05: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 21 Mai, 22:02

Henri's gravatar image

Henri
11.7k42235

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

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:

×13
×2
×1

Frage gestellt: 20 Mai, 03:16

Frage wurde angeschaut: 734 Mal

Zuletzt aktualisiert: 21 Mai, 22:02