Listen in Spalten

Bei der Arbeit zu meinem Paket exsheets, mit dem man Übungsblätter oder auch Übungsaufgaben in Büchern (jeweils mit Lösungen) erstellen kann, bin ich auf folgende Aufgabe gestoßen:

In vielen Mathebüchern nicht nur meiner Schulzeit, sondern auch in aktuellen, findet man Aufgaben in Spalten angeordnet, durchnummeriert von links nach rechts.

tasks-1

Die Lösungen, die es dafür gab, fand ich zu der Zeit nicht recht befriedigend.

  • multicol und enumerate – damit lassen sich ohne weiteres Listen in mehreren Spalten erstellen, aber durchgezählt von oben nach unten statt von links nach rechts.
  • shortlst – darauf bin ich zu der Zeit nicht gestoßen, es ist aufgrund der Lizenz auch nicht in TeX Live. Grundsätzlich sieht es aber ganz gut aus.
  • multenum – die Syntax hat mich nicht wirklich überzeugt. Vor allem, dass Items jetzt als Argumente von Makros eingegeben werden, hat mich etwas gestört, ganz abgesehen davon, dass man sich eine Reihe von Makros merken muss.
  • inparaenum – löst die Aufgabe nicht wirklich.

Was hieß das konkret? Eine neue, eigene Lösung musste her. Daraus ist das tasks-Paket geboren. Das Paket war eine ganze Zeit lang gar kein eigenes Paket, sondern eine Funktionalität von exsheets. Auf Anwenderwunsch habe ich sie dann in ein eigenes Paket extrahiert, dass aber immer noch mit exsheets gebündelt war. Inzwischen ist es aber ein eigenständiges Paket.

Seine Syntax ist einfach:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{tasks}
\begin{document}
\begin{tasks}(3)
  \task eins
  \task zwei
  \task drei
  \task vier
  \task fünf
\end{tasks}
\end{document
}

tasks-2

Die Umgebung hat ein optionales Argument (<zahl>), mit dem man die Anzahl der Spalten angeben kann. Die voreingestellte Zahl lässt sich per Setup ändern und ist erst einmal 1.

Die neueste Version 0.10 erlaubt es auch, dass einzelne Punkte mehrere Spalten überspannen:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{tasks}
\begin{document}
\begin{tasks}(4)
  \task eins
  \task zwei
  \task drei
  \task vier
  \task fünf
  \task*(2) jetzt mal über zwei Spalten
  \task sieben
  \task acht
  \task* und die restlichen Spalten überspannen, hier sind es drei.
  \task! Zu guter letzt einmal über die ganze Zeile, no matter what. Wären wir
    nicht schon am Anfang, hätte das eine neue Zeile begonnen.
  \task elf
\end{tasks}
\end{document
}

Wie ich das mag, habe ich dem Paket eine ganze Reihe von Optionen zur Anpassung gegeben und man kann auch eigene gleichartige Umgebungen definieren.

Man sollte nicht verschweigen, das das Paket einige Einschränkungen hat:

  • die tasks-Liste lässt sich nicht verschachteln. Streng genommen ist sie auch keine Liste im LaTeX-Sinne.
  • Die Umgebung liest ihren Inhalt als Makro-Argument mit allen Einschränkungen, die das mit sich bringt.
  • Die einzelnen Items werden als Boxen gesetzt, erlauben daher keinen Seitenumbruch innerhalb eines Items.

tasks-3

Über Clemens

Ich bin ein LaTeX-Enthusiast, der auch mit ein paar Paketen wie chemmacros oder fnpct einen bescheidenen Beitrag zur LaTeX-Vielfalt beitragen hat. Ich habe noch einen eigenen Blog: einzelMEINUNG und einen englischsprachigen Blog, der sich ausschließlich mit LaTeX beschäftigt mychemistry.eu.

21. Juli 2014 von Clemens
Kategorien: LaTeX | Schlagwörter: , , | 7 Kommentare

Kommentare (7)


  1. Warning: preg_replace_callback(): Error while studying pattern in /opt/osqa-1.0rc-2/apps/osqa/blog/wp-includes/formatting.php on line 1610

    Das sieht interessant aus, danke für das Paket und den Artikel darüber.
    Aber warum ist das optionale Argument der Task-Umgebung in runden Klammern anzugeben? Wären eckige Klammern nicht viel LaTeXiger (falls es dieses Wort geben sollte)?

    • Es gibt auch ein optionales Argument in eckigen Klammern, das die »normalen« Optionen in keyval-Syntax empfängt. Ich hätte die Spalten natürlich mit columns=<num> mit rein nehmen können, wollte das aber extra, weil mir schien, dass das häufiger gebraucht würde, als andere Optionen. Und damit man das zweite optionale Argument auch ohne das erste verwenden kann, sind andere Klammern kein ferner Gedanke.

  2. Hallo Clemens, kennst Du NOX ?
    Das ist ein Paket, das ich mal in einer Onlinezusammenarbeit mit jemandem zusammen entwickelt habe. Es bietet sehr viele Möglichkeiten zur Anordnung von Inhalten, wie Du sie suchst.

  3. @clemens

    ” die tasks-Liste lässt sich nicht verschachteln. ”

    Ich weiß nicht genau, was Du hier mit “verschachteln” meinst, aber NOX läßt es zu, in jedem Item nahezu alle Latex-Befehle und Umgebungen anzuwenden. Für “task in task” habe ich keine Lösung.

    ” Die einzelnen Items werden als Boxen gesetzt, erlauben daher keinen Seitenumbruch innerhalb eines Items.”

    In NOX sind Zeilenumbrüche innerhalb der Items möglich.

    Frage: Würde nicht das Ersetzen von \hbox mit \vbox oder \vtop in Tasks das Umbruchproblem lösen?

    Interessant wäre, ob Du für NOX eine Möglichkeit findest, die mehrspaltige Lösung hinzuzufügen.

  4. @clemens

    .. falls Du Zeilenumbrüche statt Seitenumbrüche gemeint hast. ..

    • Mit »Verschachteln« meine ich, dass man keine tasks-Liste innerhalb einer tasks-Liste verwenden kann. Allerdings habe ich das auch noch nie gebraucht, und ich verwende tasks oft.

      Und mit »Seitenumbrüchen« meine ich tatsächlich »Seitenumbrüche«. Die sind innerhalb eines Items unmöglich, weil die einzelnen Items Boxen sind.

      Nochmals danke für den Hinweis auf nox aber wie schon gesagt: ich suche gar keine Alternative. :) (Sonst hätte ich eine Frage auf der TeXwelt gestellt anstatt hier mein Paket vorzustellen.)

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert