\section{\ldeen{Inhalte gestalten}{To Shape Content}}

\subsection{\ldeen{Titelei und Metadaten}{Titles and Metadata}}
\ldeen{Auch wenn jede Lehreinheit \emph{physisch} in einem eigenen Verzeichnis ist, gibt es einen Befehl für die \emph{logische} Gliederung}{Even though each teaching unit is \emph{physically} located in its own directory, there is a command for the \emph{logical} structure}:

\begin{commands}
  \command{lecture}[\oarg{\ldeen{Kurzname}{short name}}\marg{\ldeen{Name}{name}}\marg{Label}]
    \ldeen{Beginnt eine logisch benannte Lehreinheit und erzeugt in
    Präsentationsformen deren Titelfolie.}{Starts a logically named teaching
    unit and creates its title slide in presentation forms.}
\end{commands}
\ldeen{\cs{lecture} legt in der Kurzform eine Titelfolie an, in der typischerweise neben dem Namen der Vorlesungseinheit auch die Metadaten noch einmal wiedergegeben werden. Die genaue Gestaltung hängt vom Präsentationsthema ab, falls
Sie ein solches verwenden.
}{In presentation forms, \cs{lecture} creates a title slide that normally
repeats the course-unit title and relevant metadata. Its exact appearance
depends on the presentation theme, if one is used.}

\ldeen{Alle Lehreinheiten eines Projekts gehören zum gleichen Kurs und haben daher den gleichen Kursnamen, den oder die gleichen Autoren und ggf.\ weitere gemeinsame Metadaten.
Damit diese nicht für jede Lehreinheit wiederholt werden müssen, werden diese Metadaten in der Datei
\File{Include/projectconfig.tex} hinterlegt.
Dafür stehen Ihnen die folgenden Befehle zur Verfügung:}{All course units in a
project belong to the same course and therefore share the course name, the
author or authors, and possibly further metadata. To avoid repeating these for
every unit, store them in \File{Include/projectconfig.tex}. The following
commands are available:}
\begin{commands}
  \command{course}[\aarg{\ldeen{Modus}{mode}}\oarg{\ldeen{Kurzname}{short name}}\marg{\ldeen{Name}{name}}]
    \ldeen{Setzt den Kursnamen für alle oder für den angegebenen Modus.}{Sets
    the course name for all modes or for the specified mode.}
  \command{event}[\aarg{\ldeen{Modus}{mode}}\oarg{\ldeen{Kurzname}{short name}}\marg{\ldeen{Name}{name}}]
    \ldeen{Setzt den Veranstaltungsnamen für alle oder für den angegebenen
    Modus.}{Sets the event name for all modes or for the specified mode.}
\end{commands}

\ldeen{Dieselben Signaturen besitzen \cs{title}, \cs{subtitle}, \cs{author},
\cs{institute} und \cs{date}. Das Profil entscheidet über
\option{course-target} und \option{event-target}, ob Kurs und Veranstaltung in
Titel, Untertitel oder gar nicht übernommen werden. Die vollständigen Setter
und Abfragebefehle sind in Abschnitt~\ref{sec:configuration-reference}
aufgeführt.}{The commands \cs{title}, \cs{subtitle}, \cs{author},
\cs{institute}, and \cs{date} have the same signatures. Through
\option{course-target} and \option{event-target}, the profile decides whether
course and event metadata are mapped to the title, subtitle, or neither. The
complete setters and query commands are listed in
Section~\ref{sec:configuration-reference}.}

\ldeen{Die drei Argumentarten dürfen nicht vertauscht werden. Die spitzen
Klammern wählen einen Modus, die eckigen Klammern enthalten den Kurztext, und
die geschweiften Klammern den verpflichtenden Langtext. Beispielsweise setzt}{The
three argument forms are not interchangeable. Angle brackets select a mode,
square brackets contain the short text, and braces contain the required long
text. For example}:

\begin{verbatim}
\course<presentation>[OS]{Betriebssysteme}
\course<longform>[Betriebssysteme]{Betriebssysteme und Systemsoftware}
\end{verbatim}

\ldeen{damit je nach Dokumentinstanz unterschiedliche Kurz- und Langwerte.
Ohne Modusangabe gilt der Wert für alle Instanzen; ohne Kurzform wird der
Langwert zugleich als Kurzwert verwendet.}{sets different short and long values
depending on the document instance. Without a mode, the value applies to all
instances; without a short form, the long value is also used as the short
value.}

\subsection{\ldeen{Präsentationen}{Presentations}}
\ldeen{Wenn Sie Präsentationen entwickeln, stellt \osglecture\ unabhängig vom
gewählten Profil die gemeinsame Struktur aus \env{frame}, \cs{frametitle} und
\cs{lecture} bereit. Overlays und themenspezifische Befehle stammen dagegen
von der gewählten Basisklasse. Ein auf \cls{beamer} zugeschnittenes Theme ist
daher nicht automatisch mit \cls{ltx-talk} verwendbar. Portable
Inhaltsauswahl sollte über die im folgenden Abschnitt beschriebenen Modi
erfolgen.}{When developing presentations, \osglecture\ provides the common
structure formed by \env{frame}, \cs{frametitle}, and \cs{lecture}, regardless
of the selected profile. Overlays and theme-specific commands, however, come
from the selected base class. A theme designed for \cls{beamer} is therefore
not automatically usable with \cls{ltx-talk}. Use the modes described in the
following section for portable content selection.}

\ldeen{Standardmäßig bindet \option{patch-overlays=true} Ausdrücke aus
registrierten Modi in die nativen Modus- und Overlaybefehle von \cls{beamer}
und \cls{ltx-talk} ein. Eine Spezifikation wie \code{<longform>} oder
\code{<slides||handout>} wird dann portabel ausgewertet; bei \code{<slides:2->}
wertet \osglecture\ den Modusteil aus und reicht der Präsentationsklasse nur den
Overlaybereich \code{<2->}. Eine rein numerische Spezifikation wie \code{<2->}
bleibt ein klassenabhängiges Overlay. \code{|} und \code{,} innerhalb von \code{<...>}
gehören stets zur Syntax der Präsentationsklasse; \code{||} ist der portable Oder-Operator. Unbekannte
Ausdrücke werden unverändert an die Basisklasse weitergereicht. Wer diese
Integration nicht möchte, setzt \option{patch-overlays=false}; \cs{lecturemode}
und \cs{IfLectureModeTF} funktionieren weiterhin.}{By default,
\option{patch-overlays=true} integrates expressions made up of registered
modes into the native mode and overlay commands of \cls{beamer} and
\cls{ltx-talk}. A specification such as \code{<longform>} or
\code{<slides||handout>} is then evaluated portably; for \code{<slides:2->}
\osglecture\ evaluates the mode part and hands the presentation class only the overlay
range \code{<2->}. A purely numeric specification such as \code{<2->} remains a
class-specific overlay. \code{|} and \code{,} inside \code{<...>} always belong
to the presentation class's syntax; \code{||} is the portable disjunction operator. Unknown expressions are
delegated unchanged to the base class. Set \option{patch-overlays=false} to
disable this integration; \cs{lecturemode} and \cs{IfLectureModeTF} continue to
work.}
\subsection{\ldeen{Anmerkungen und Quellenangaben}{Remarks and Source Credits}}
\ldeen{Mit \cs{Note}\marg{Anmerkung} kann zu einem Frame ein Hinweis für die
Vortragenden notiert werden. In einer Dokumentinstanz des Typs \code{screen}
erscheinen die Anmerkungen neben der Folie; auf den Folien für das Publikum und
in Langformen werden sie nicht gesetzt. Der Aufruf steht innerhalb des Frames,
auf den sich die Anmerkung bezieht.}{The command
\cs{Note}\marg{remark} records a remark for the presenter. In a document
instance of type \code{screen}, remarks appear beside the slide; they are not
typeset on audience slides or in long forms. Place the command inside the frame
to which the remark belongs.}

\begin{verbatim}
\begin{frame}
  \frametitle{Virtueller Speicher}
  Seitentabellen ordnen virtuelle Seiten physischen Seitenrahmen zu.
  \Note{Hier die Abbildung schrittweise erläutern.}
\end{frame}
\end{verbatim}

\ldeen{Quellenangaben, etwa unmittelbar unter einer Abbildung, werden mit
\cs{sourceref} gesetzt. Das optionale Argument enthält den Bezeichner, das
Pflichtargument die Quelle. Der Bezeichner lautet
sprachabhängig zunächst "`Quelle"' beziehungsweise "`Source"'; ein leeres
optionales Argument unterdrückt ihn. Die Sternform setzt eine eigene
Quellenzeile rechtsbündig. In einem getaggten Dokument ist die Quellenangabe
regulärer Inhalt und bleibt Teil der Lesereihenfolge.}{Source credits, for
example directly below a figure, are typeset with \cs{sourceref}. Its optional
argument contains the label and its mandatory argument the source. The language-dependent default label
is "`Quelle"' or "`Source"'; an empty optional argument suppresses it. The
starred form produces a separate, flush-right source line. In a tagged
document, the source credit is regular content and remains part of the reading
order.}

\begin{verbatim}
\includegraphics[width=.7\linewidth]{page-table}
\sourceref{Eigene Darstellung}
\end{verbatim}

\ldeen{Für einen Einwurf neben dem eigentlichen Textstrom steht
\cs{osgannotation}\marg{Inhalt} zur Verfügung. Typischerweise enthält das
Argument eine mit TikZ über die Folie gelegte handschriftliche Anmerkung. Der
Aufruf gehört im Quelltext an die Stelle, an der die Anmerkung gelesen werden
soll: Diese Stelle bestimmt bei getaggter Ausgabe die Lesereihenfolge, nicht
die gezeichnete Lage auf der Seite.}{For a remark beside the main text flow,
use \cs{osgannotation}\marg{content}. Its argument will typically contain a
handwritten annotation placed over the slide with TikZ. Put the call at the
position in the source where the annotation should be read: in tagged output,
this position, rather than its drawn position on the page, determines the
reading order.}

\subsection{\ldeen{Mehrsprachige Dokumente}{Multilingual Documents}}
\ldeen{In einem \osglecture-Projekt können mehrere Sprachfassungen eines
Inhalts erstellt werden. Dabei teilen sich OLLM und das Paket \pkg{langselect}
die Arbeit: Das Manifest sagt, \emph{welche} Sprachfassungen gebaut werden
dürfen; OLLM wählt eine davon; \pkg{langselect} setzt in der Quelle die
passende Formulierung. Diese Aufgabenteilung verhindert, dass die Buildlogik in
den Fachtext wandert.}{In an \osglecture\ project, OLLM and the package \pkg{langselect}
share the work: the manifest states \emph{which} language versions may be built;
OLLM selects one of them; \pkg{langselect} typesets the matching wording in
the source. This division of responsibility keeps build logic out of the subject
matter.}

\ldeen{Tragen Sie jede Projektsprache zuerst im Manifest ein
(\code{[targets.defaults].languages}, in fester Reihenfolge) und ordnen Sie sie
anschließend in \File{Include/projectconfig.tex} einem von \pkg{babel}
verstandenen Namen zu. Für Deutsch und britisches Englisch sieht die praktische
Konfiguration so aus}{First list every project language in the manifest
(\code{[targets.defaults].languages}, in a fixed order), then map it in
\File{Include/projectconfig.tex} to a name understood by \pkg{babel}.
For German and British English, a practical configuration is}:
\begin{verbatim}
\LectureProjectSetup{
  languages={
    map={de=ngerman,en=british},
    load babel
  }
}
\end{verbatim}

\ldeen{Die auswählbaren Sprachen selbst werden hier nicht mehr wiederholt --
\osglecture\ übernimmt sie aus dem Manifest.}{The selectable languages
themselves are no longer repeated here -- \osglecture\ takes them from the
manifest.}

\ldeen{Ohne expliziten Unterschlüssel \option{targetlang} verwendet
\osglecture\ automatisch \cs{OsgLectureLanguage}, also die vom Build gewählte
Projektsprache. \option{targetlang} bleibt für einen bewussten Override
verfügbar.}{Without an explicit \option{targetlang} sub-key, \osglecture
automatically uses \cs{OsgLectureLanguage}, that is, the project language
selected by the build. \option{targetlang} remains available as an explicit
override.}

\ldeen{In den Lehreinheiten verwenden Sie danach die bereitgestellten
Sprachmakros. Bei der Reihenfolge \keyis{selectable}{de,en} ist
\cs{ldeen}\Marg{deutsch}\Marg{English} die naheliegende Form. Schreiben
Sie kurze, vollständige Varianten; Satzzeichen gehören in die jeweilige
Sprachfassung, wenn sie sich unterscheiden können.}{In the course units, use the
provided language commands. With \keyis{selectable}{de,en},
\cs{ldeen}\Marg{Deutsch}\Marg{English} is the natural form. Write short,
complete variants; punctuation belongs inside each language version whenever it
may differ.}

\begin{verbatim}
\section{\ldeen{Synchronisation}{Synchronization}}
\ldeen{Ein Semaphor schützt den kritischen Abschnitt.}
      {A semaphore protects the critical section.}
\end{verbatim}

\ldeen{Werte, Formeln, Makros oder Verweise, die in beiden Sprachen gleich sind,
sollten Sie nicht kopieren. Nutzen Sie dafür die Sternform und Platzhalter. So
steht ein später geänderter Wert weiterhin nur an einer Stelle}{Do not duplicate
values, formulae, commands, or references that are identical in both languages.
Use the starred form and placeholders instead. A value changed later then still
occurs in only one place}:
\begin{verbatim}
\ldeen*{Der Scheduler wählt alle @1 eine Aufgabe aus.}
       {The scheduler selects a task every @1.}
       {$10\,\mathrm{ms}$}
\end{verbatim}

\ldeen{Die Platzhalter \meta{@1}, \meta{@2} usw. werden in jeder
Sprachfassung durch dieselben nachfolgenden Argumente ersetzt. Das ist besonders
nützlich für Fachbegriffe, Querverweise und Zahlen. Wenn eine Sprache eine andere
Wortstellung benötigt, platzieren Sie denselben Platzhalter einfach an der
passenden Stelle.}{The placeholders \meta{@1}, \meta{@2}, and so on are
replaced in every language version by the same following arguments. This is
particularly useful for technical terms, cross-references, and numbers. If a
language requires a different word order, simply put the same placeholder in the
appropriate position.}

\begin{warnbox}{\ldeen{Achtung}{Attention}}
\ldeen{Starten Sie Builds über OLLM und wählen Sie die Sprache mit
\option{--language}. Setzen Sie die Zielsprache \textbf{nicht} zusätzlich von Hand im
Quelldokument; sonst können Manifest, Name der Ausgabedatei und tatsächlich gesetzte
Sprache auseinanderlaufen.}{Start builds through OLLM and select the language
with \option{--language}. \textbf{Do not} additionally hard-code the target language in
the source; otherwise the manifest, output file name, and actually typeset language
can disagree.}
\end{warnbox}

\ldeen{Ob eine Übersetzung vollständig ist, prüfen Sie am zuverlässigsten mit
aller vorgesehenen Dokumentinstanzen der Einheit. Eine erfolgreiche deutsche Fassung sagt
nichts darüber aus, ob im englischen Zweig ein Argument oder ein Befehl fehlt.}{
The most reliable way to check whether a translation is complete is to typeset
every intended document instance of the unit. A successful German version does not tell you whether
an argument or command is missing in the English branch.}
\begin{verbatim}
ollm build --all
\end{verbatim}

\subsection{\ldeen{Inhalte mit \osglecture-Modi auswählen}{Selecting Content with \osglecture\ Modes}}
\label{sec:content-osglecture-modes}
\ldeen{Die begriffliche Trennung von Modi und Overlays sowie das Zusammenspiel
mit Targets und Profilen wurde in Abschnitt~\ref{sec:concept-modes-overlays}
eingeführt. Hier geht es um die konkrete Autorenschnittstelle: Modi wählen
Inhalte und Metadaten einer Dokumentinstanz aus; sie steuern nicht die
Klickfolge innerhalb einer Präsentation.}{Section~\ref{sec:concept-modes-overlays}
introduced the conceptual distinction between modes and overlays and their
interaction with targets and profiles. This section covers the concrete author
interface: modes select content and metadata for a document instance; they do
not control the click sequence within a presentation.}
\ldeen{Ein \emph{Modus} ist eine benannte Eigenschaft der gerade erzeugten
Dokumentinstanz. Er beantwortet eine einfache Frage wie "`Ist dies eine
Präsentation?"', "`Ist dies eine Langform?"' oder "`Ist dies eine Druckausgabe?"'.
Der Befehl \cs{lecturemode}\aarg{Modus}\marg{Inhalt} gibt
seinen Inhalt nur aus, wenn die aktuelle Instanz diese Eigenschaft besitzt.}{A
\emph{mode} is a named property of the document instance currently being
created. It answers a simple question such as "`Is this a presentation?"',
"`Is this a long form?"', or "`Is this a print output?"'. The
command \cs{lecturemode}\aarg{mode}\marg{content} emits its content only
when the current instance has that property.}

\ldeen{Wer \cls{beamer} oder \cls{ltx-talk} kennt, kennt bereits ähnlich
geschriebene Modusbefehle. \cs{lecturemode} ist die portable
Schnittstelle von \osglecture: Sie fragt den von Dokumentklasse und Profil
unabhängigen Modusgraphen ab und funktioniert deshalb beim Wechsel zwischen
beiden Präsentationsklassen ebenso wie in Langformen. Die spitzen Klammern sind
hier eine Modusauswahl und keine Beamer-Overlayangabe.}{Users familiar with
\cls{beamer} or \cls{ltx-talk} will already know similarly written mode
commands. \cs{lecturemode} is \osglecture's portable interface: it
queries the mode graph independently of the document class and profile and
therefore continues to work when switching between the two presentation
classes as well as in long forms. Here the angle brackets select a mode; they
are not a Beamer overlay specification.}

\ldeen{Beginnen Sie bei angepassten Inhalten mit der allgemeinsten Absicht.
Soll ein Absatz ausschließlich in einer Langform erscheinen, wählen Sie den
Verhaltensmodus \code{longform}; soll er nur auf Folien stehen, wählen Sie
\code{slides}. Eine Festlegung auf die konkrete Basisklasse ist selten nötig
und erschwert einen späteren Profilwechsel.}{When adapting content, begin with
the most general intention. If a paragraph should appear only in a long form,
select the \code{longform} behavior mode; if it belongs only on slides, select
\code{slides}. Selecting the concrete base class is rarely necessary and makes
a later profile change harder.}

\ldeen{\osglecture\ unterscheidet ausgewählte Blattmodi und deren aktive
Elternhülle. \cs{LectureModes} nennt die konkret gesetzten Modi;
\cs{ActiveLectureModes} enthält zusätzlich alle über den Modusgraphen
erreichbaren allgemeineren Modi. Bei Beamer-Folien kann die erste Liste
beispielsweise \code{projector,beamer} enthalten, während in der zweiten außerdem
\code{presentation} aktiv ist. \code{slides} ist dabei der benutzerfreundliche
Alias für \code{projector}. Für die Inhaltsauswahl ist
fast immer die Elternhülle gemeint; genau diese prüft \cs{lecturemode}.}{
\osglecture\ distinguishes selected leaf modes from their active parent
closure. \cs{LectureModes} lists the modes selected directly;
\cs{ActiveLectureModes} additionally contains every more general mode reachable
through the mode graph. For Beamer slides, for example, the first list may
contain \code{projector,beamer}, while the second also activates
\code{presentation}. Here, \code{slides} is the user-facing alias for
\code{projector}. Content selection almost always means the parent
closure, which is precisely what \cs{lecturemode} tests.}

\begin{verbatim}
\lecturemode<longform>{
  \ldeen{Ausführliche Herleitung der Laufzeit: $T(n)=\Theta(n\log n)$.}
        {Detailed derivation of the running time: $T(n)=\Theta(n\log n)$.}
}
\lecturemode<slides>{
  \centering $T(n)=\Theta(n\log n)$
}
\end{verbatim}

\ldeen{Modi sind hier Eigenschaften der Ausgabe. Ein konkreter Dokumenttyp
aktiviert zugleich allgemeinere Modi: Ein Handout ist beispielsweise eine
Präsentationsform und eine Druckausgabe. Dadurch kann derselbe Inhalt mit
\code{<presentation>} für Folien und Handouts oder mit \code{<print>} für
alle druckorientierten Ergebnisse freigeschaltet werden. Mehrere Alternativen
lassen sich mit \code{||} verbinden.}{Modes are properties of the output in
this context. A concrete document type also activates more general modes: a
handout, for example, is both a presentation form and a print output. Thus, the
same content can be enabled with \code{<presentation>} for slides and handouts,
or with \code{<print>} for all print-oriented results. Multiple alternatives
can be joined with \code{||}.}

\ldeen{Dasselbe Modusargument steht auch an Metadatenbefehlen wie
\cs{course}\aarg{longform} und an bedingt geladenen Präambelfragmenten zur
Verfügung. Dadurch bleibt die Auswahlregel auf allen Ebenen gleich: Erst wird
der Modusgraph aus Dokumenttyp und Profil fertiggestellt, danach werden
modusabhängige Werte und Inhalte ausgewertet. Eigene Modi müssen deshalb vor
dieser Finalisierung deklariert werden; die Projektkonfiguration dafür steht in
Abschnitt~\ref{sec:configuration-mode-extensions}.}{The same mode argument is
available on metadata commands such as \cs{course}\aarg{longform} and on
conditionally loaded preamble fragments. The selection rule therefore remains
the same at every level: the mode graph is first completed from document type
and profile, after which mode-dependent values and content are evaluated.
Custom modes must consequently be declared before this finalization; the
project configuration is described in
Section~\ref{sec:configuration-mode-extensions}.}

\subsection{\ldeen{Aufzählungen als Fließtext}{Lists as Continuous Text}}
\ldeen{Für Aufzählungen, die im Skript besser als Fließtext lesbar sind, ist
\pkg{presitemize} die nutzerfreundlichere Wahl. Die Einträge beschreiben
Aussagen; die Einleitungsbefehle geben deren logische Beziehung an.}{For lists
that read better as prose in lecture notes, \pkg{presitemize} is the more
convenient choice. Entries describe statements; their introductory commands
specify the logical relationship between them.}

\begin{verbatim}
\begin{presitemize}
  \item Die Übersetzung \finite{funktioniert}
  \anditem das Programm \finite{liefert} ein Ergebnis
  \butitem wir \finite{haben} vereinfacht
  \thereforeitem wir \finite{müssen} das Ergebnis prüfen
\end{presitemize}
\end{verbatim}

\ldeen{In Präsentationen bleibt daraus eine Liste. In der Langform verbindet
\pkg{presitemize} die Aussagen sinngemäß zu: "`Die Übersetzung funktioniert
und das Programm liefert ein Ergebnis, aber wir haben vereinfacht, weshalb wir
das Ergebnis prüfen müssen."' \cs{finite} markiert das finite Verb,
damit es insbesondere im deutschen Nebensatz an die richtige Stelle rücken
kann.}{In presentations this remains a list. In the long form,
\pkg{presitemize} combines the statements approximately as follows: "`The
translation works and the program produces a result, but we simplified, and
therefore we have to check the result."' \cs{finite} marks the finite
verb so that it can be moved to the correct position, especially in a German
subordinate clause.}

\ldeen{Für reine Interpunktionsfortsetzungen stehen
\cs{commaitem} und \cs{colonitem} zur Verfügung. Sie
erzeugen in der Langform "`\code{, }"' beziehungsweise "`\code{: }"' ohne ein
zusätzliches Verbindungswort; in Präsentationen erscheinen sie als gewöhnliche
Items. Gleichwertig sind \cs{presitem}\Oarg{relation=comma} und
\cs{presitem}\Oarg{relation=colon}.}{For punctuation-only
continuations, \cs{commaitem} and
\cs{colonitem} are available. In long-form output they produce
"`\code{, }"' and "`\code{: }"', respectively, without an additional
conjunction; in presentations they appear as ordinary items. The equivalent
key forms are \cs{presitem}\Oarg{relation=comma} and
\cs{presitem}\Oarg{relation=colon}.}

\ldeen{Verwenden Sie \pkg{presitemize} für flache Folgen kurzer Aussagen.
Für verschachtelte Listen, Tabellen oder deutlich verschiedene Erklärwege sind
explizite Modusvarianten verständlicher. Als Faustregel gilt: Ändert sich nur
die sprachliche Verbindung, genügt \pkg{presitemize}; ändert sich die
didaktische Struktur, verwenden Sie \cs{lecturemode}.}{Use
\pkg{presitemize} for flat sequences of short statements. For nested lists,
tables, or substantially different explanations, explicit mode variants are
clearer. As a rule of thumb: if only the linguistic connection changes,
\pkg{presitemize} is sufficient; if the didactic structure changes, use
\cs{lecturemode}.}

\begin{infobox}{\ldeen{Hinweis}{Hint}}
\ldeen{Die automatische Fließtextverknüpfung von \pkg{presitemize} besitzt
derzeit Sprachprofile für Deutsch, Englisch und Französisch einschließlich
üblicher Varianten wie \code{ngerman}, \code{british} und
\code{fr-CA}. Bei einer anderen Sprache warnt das Paket und verwendet für die
Verbindungswörter ersatzweise das englische Profil. Das ist nur dann sinnvoll,
wenn die betreffende Ausgabe tatsächlich englischen Text enthält.}{The
automatic prose joining performed by \pkg{presitemize} currently has
language profiles for German, English, and French, including common variants
such as \code{ngerman}, \code{british}, and \code{fr-CA}. For another
language the package issues a warning and uses the English profile for its
connectives as a fallback. This is useful only if the affected output actually
contains English text.}
\end{infobox}

\ldeen{Für weitere Sprachen formulieren Sie die Langform explizit und wählen
mit \cs{lecturemode} zwischen ihr und der Präsentationsliste. So
bleiben Wortstellung, Flexion und Interpunktion unter Ihrer Kontrolle; die
einzelnen Formulierungen können darin weiterhin mit den von \pkg{langselect}
erzeugten Sprachmakros ausgewählt werden.}{For additional languages, write the
long form explicitly and use \cs{lecturemode} to select between it
and the presentation list. This keeps word order, inflection, and punctuation
under your control; the individual formulations can still be selected with the
language commands generated by \pkg{langselect}.}

\subsection{\ldeen{Zweispaltige Inhalte}{Two-Column Content}}
\ldeen{Was auf einer breiten Folie nebeneinander steht, etwa eine Abbildung und
ihre Erläuterung, liest sich auf der schmaleren Seite einer Langform meist
besser untereinander. Die Umgebung \env{twocolumns} trifft diese
Unterscheidung selbst: Sie setzt zwei durch \cs{nextcolumn} getrennte Teile
nebeneinander, wenn ein Modusausdruck erfüllt ist, und sonst nacheinander.
Ohne Angabe lautet der Modusausdruck \code{presentation}.}{What sits side by
side on a wide slide, such as a figure and its explanation, usually reads
better one after the other on the narrower page of a long form. The
\env{twocolumns} environment makes this distinction itself: it typesets two
parts separated by \cs{nextcolumn} side by side when a mode expression
matches, and consecutively otherwise. Without one, the mode expression is
\code{presentation}.}

\begin{verbatim}
\begin{twocolumns}[t,.46]
  \includegraphics[width=\linewidth]{page-table}
  \nextcolumn
  Seitentabellen ordnen virtuelle Seiten physischen Seitenrahmen zu.
\end{twocolumns}
\end{verbatim}

\ldeen{Im optionalen Argument bestimmt eine Zahl zwischen null und eins den
Anteil der ersten Spalte an der verfügbaren Breite (Vorgabe \code{.5}). Ein
Wert \code{t}, \code{c} oder \code{b} richtet beide Spalten oben, mittig oder
unten aus; zwei solche Werte richten die Spalten einzeln aus. \code{sep}
setzt den Steg zwischen den Spalten, etwa \code{sep=1cm}, und ersetzt die
Vorgabe \cs{columnsep}. Der Modusausdruck steht in spitzen Klammern vor dem
optionalen Argument: \code{<all>} erzwingt Spalten in jedem Modus,
\code{<longform>} nur in Langformen und \code{<presentation|longform>} in
beiden Verhaltensklassen.}{In the optional argument, a number between zero
and one sets the first column's share of the available width (default
\code{.5}). One value \code{t}, \code{c}, or \code{b} aligns both columns at
the top, centre, or bottom; two such values align the columns individually.
\code{sep} sets the gutter between the columns, for example \code{sep=1cm},
replacing the default \cs{columnsep}. The mode expression precedes the
optional argument in angle brackets: \code{<all>} forces columns in every
mode, \code{<longform>} only in long forms, and
\code{<presentation|longform>} in both behaviour classes.}

\subsection{\ldeen{Querverweise}{Cross References}}
\ldeen{Für Verweise innerhalb derselben Dokumentinstanz können Sie die
üblichen Befehle von \pkg{hyperref} verwenden. \osglecture\ stellt daneben
\cs{olref} und \cs{olpageref} bereit. Ohne optionale
Dokumentadresse verhalten sie sich wie \cs{ref} und
\cs{pageref}}{For references within the same document instance,
you can use the usual \pkg{hyperref} commands. In addition, \osglecture\
provides \cs{olref} and \cs{olpageref}. Without an
optional document address they behave like \cs{ref} and
\cs{pageref}}:
\begin{verbatim}
\section{Scheduling}\label{sec:scheduling}
Siehe Abschnitt~\olref{sec:scheduling} auf Seite~\olpageref{sec:scheduling}.
\end{verbatim}

\ldeen{Das optionale Argument vor dem Label bezeichnet eine (andere) logische
Lehreinheit derselben Serie. Sie erinnern sich: Diese logische
Identität wird im dritten Parameter des \cs{lecture}-Befehls
festgelegt.
Standardmäßig verwendet der Verweis dabei
denselben Dokumenttyp und dieselbe Sprache wie das aktuelle Dokument. Der
folgende Verweis aus der Unit \code{memory} führt daher in einem deutschen
Skript zum deutschen Skript der Unit \code{processes}, in englischen Folien
dagegen zu deren englischen Folien}{The optional address before the label names
another logical unit in the same series. As explained above, this logical
identity is set by the third argument of the \cs{lecture} command. By default,
the reference uses the
same document type and language as the current document. Thus, from the
\code{memory} unit, the following reference leads from a German script to the
German script of \code{processes}, but from English slides to its English
slides}:
\begin{verbatim}
\olref[processes]{sec:scheduling}
\end{verbatim}

\ldeen{Mit den Schlüsseln \option{type} und \option{lang} im optionalen Argument
lässt sich diese Dokumentinstanz ausdrücklich überschreiben. Das ist dann ein dokumenttypübergreifender
Verweis: Er kann beispielsweise von Folien auf die ausführliche Herleitung im
Skript zeigen}{The \option{type} and \option{lang} keys explicitly override
that document instance. This creates a cross-document-type reference, for example
from slides to the detailed derivation in the script}:
\begin{verbatim}
\olautoref[processes,type=script,lang=de]{sec:scheduling-proof}
\end{verbatim}

\ldeen{Ein schlüsselloser Eintrag der Adresse ist stets die Unit-ID. Verwenden
Sie stabile logische IDs statt Verzeichnisnamen; OLLM löst die gewünschte
Kombination aus Unit, Dokumenttyp und Sprache über seinen Referenz-Snapshot
auf. Das Zieldokument muss mindestens einmal erfolgreich gebaut worden sein;
erst dann stehen seine Referenzen anderen Units zur Verfügung. Nach Änderungen an abhängigen Units ist
\code{ollm build --resolve} der bequemste Weg, Produzenten und Konsumenten
bis zu einem konsistenten Zustand neu zu bauen.}{A keyless address entry is
always the unit ID. Use stable logical IDs rather than directory names; OLLM
resolves the requested combination of unit, document type, and language through
its reference snapshot. The target document must have been built successfully
at least once; only then are its references available to other units. After changing dependent
units, \code{ollm build --resolve} is the easiest way to rebuild producers
and consumers to a consistent state.}

\subsection{\ldeen{Literatur}{Literature}}
\ldeen{Für Literaturangaben nutzt \osglecture\ \pkg{biblatex} mit
\code{biber}. Die Literaturverwaltung wird in
\File{Include/projectconfig.tex} eingeschaltet; die Datenbank liegt
üblicherweise ebenfalls in \File{Include}, wo \OLLM\ sie für \code{biber}
auffindbar macht:}{For literature references, \osglecture\ uses
\pkg{biblatex} with \code{biber}. Bibliography management is enabled in
\File{Include/projectconfig.tex}; the database usually lives in
\File{Include} as well, where \OLLM\ makes it available to \code{biber}:}

\begin{verbatim}
\LectureProjectSetup{
  bibliography = {resources = lecture.bib}
}
\end{verbatim}

\ldeen{Der voreingestellte Stil \code{alphabetic} erzeugt Labels wie
[Knu69]; \option{style} wählt einen anderen \pkg{biblatex}-Stil,
\option{options} reicht weitere Ladeoptionen weiter. Zitiert wird mit den
üblichen Befehlen wie \cs{cite}. Ein Literaturverzeichnis gibt
\cs{printbibliography} aus; welche Dokumenttypen eines erhalten, steuern Sie
wie alles andere über Modi, etwa nur im Skript:}{The default style
\code{alphabetic} produces labels such as [Knu69]; \option{style} selects
another \pkg{biblatex} style, and \option{options} passes further load
options on. Cite with the usual commands such as \cs{cite}.
\cs{printbibliography} prints a bibliography; which document types receive
one is controlled through modes like everything else, for example only in the
script:}

\begin{verbatim}
\mode<longform>{\printbibliography}
\end{verbatim}

\ldeen{Ein Zitat verlinkt nur dann auf das Literaturverzeichnis, wenn dieses
den Eintrag im selben Dokument tatsächlich ausgibt. In Folien ohne
Verzeichnis bleibt das Label daher reiner Text statt eines Links ins Leere.
Themen- oder kapitelweise Verzeichnisse erhalten Sie mit den Filtern von
\pkg{biblatex}, etwa \code{keyword=}, \code{type=} oder
\code{category=}.}{A citation links to the bibliography only if it
actually prints the entry in the same document. In slides without a
bibliography, the label therefore remains plain text rather than a link to
nowhere. Bibliographies by topic or chapter are available through the
\pkg{biblatex} filters, such as \code{keyword=}, \code{type=}, or
\code{category=}.}

\ldeen{Ein serienweites Literaturverzeichnis gibt
\cs{printseriesbibliography} aus: alle Einträge, die irgendeine Unit der Serie
mit gleichem Dokumenttyp und gleicher Sprache zitiert, gefiltert wie bei
\cs{printbibliography}. Es kann in jeder Unit stehen, etwa in einer eigenen
Literatur-Unit oder am Ende eines Kapitels. Zitiert eine Unit Neues, meldet
\code{ollm check} das Verzeichnis als veraltet; \code{ollm build --resolve}
baut es neu. Nennt die Projektkonfiguration diese Unit als
\option{series-target}, verlinken Zitate anderer Units auf ihre Einträge,
wenn das zitierende Dokument kein eigenes Verzeichnis mit dem Eintrag hat;
bei der Integration werden diese Links intern:}{A series-wide bibliography
is printed by \cs{printseriesbibliography}: all entries cited by any unit of
the series with the same document type and language, filtered as with
\cs{printbibliography}. It can stand in any unit, for example in a
literature unit of its own or at the end of a chapter. If a unit cites
something new, \code{ollm check} reports the bibliography as stale;
\code{ollm build --resolve} rebuilds it. If the project configuration names
this unit as \option{series-target}, citations in other units link to its
entries whenever the citing document has no bibliography of its own with the
entry; on integration these links become internal:}

\begin{verbatim}
\LectureProjectSetup{
  bibliography = {resources = lecture.bib, series-target = literature}
}
\end{verbatim}

\ldeen{Eine kommentierte Leseliste stellt ausgewählte Einträge vollständig
dar, gegliedert in Gruppen:}{An annotated reading list shows selected entries
in full, organized in groups:}

\begin{verbatim}
\begin{literaturelist}
  \litgroup{Grundlagen}
  \litentry{Knu:Art-1:1969}
  \litcomment{Das Standardwerk; umfassend, aber anspruchsvoll.}
  \litgroup{Entwurf von Algorithmen}
  \litentry{Ski:AlgorithmDesign:2008}
\end{literaturelist}
\end{verbatim}

\ldeen{\cs{litcomment} kommentiert die vorangehenden Einträge; ein optionales
Argument setzt ein Label vor den Kommentar. Das optionale Argument der
Umgebung legt die Breite der Labelspalte fest.}{\cs{litcomment} comments on
the preceding entries; an optional argument puts a label in front of the
comment. The optional argument of the environment sets the width of the
label column.}

\subsection{\ldeen{Befehlsreferenz}{Command Reference}}
\label{sec:content-command-reference}

\ldeen{Die folgenden Übersichten nennen die vollständige öffentliche
Schnittstelle für die in diesem Kapitel behandelten Aufgaben. Befehle zur
Definition neuer Profile oder Adapter stehen dagegen in
Abschnitt~\ref{sec:configuration-reference}; sie werden beim gewöhnlichen
Schreiben von Lehreinheiten nicht benötigt.}{The following summaries list the
complete public interface for the tasks covered in this chapter. Commands for
defining new profiles or adapters are instead listed in
Section~\ref{sec:configuration-reference}; they are not needed when writing
ordinary course units.}

\paragraph{\ldeen{Lehreinheit und Metadaten}{Course unit and metadata}.}
\begin{commands}
  \command{lecture}[\oarg{short title}\marg{title}\marg{unit ID}]
    \ldeen{beginnt die logisch identifizierte Lehreinheit}{starts the logically
    identified course unit}.
  \command{course}[\aarg{mode}\oarg{short value}\marg{long value}]\default{}
  \command{event}[\aarg{mode}\oarg{short value}\marg{long value}]\default{}
  \command{title}[\aarg{mode}\oarg{short value}\marg{long value}]\default{}
  \command{subtitle}[\aarg{mode}\oarg{short value}\marg{long value}]\default{}
  \command{author}[\aarg{mode}\oarg{short value}\marg{long value}]\default{}
  \command{institute}[\aarg{mode}\oarg{short value}\marg{long value}]\default{}
  \command{date}[\aarg{mode}\oarg{short value}\marg{long value}]
    %\aarg{mode}\oarg{short value}\marg{long value}\quad
    \ldeen{setzen ein Metadatenfeld; Modus und Kurzform sind optional}{set a
    metadata field; mode and short form are optional}.
  \command{OsgLectureSet}[\meta{Field}\aarg{mode}\oarg{short value}%
    \marg{long value}]
    \ldeen{einheitlicher Settername für jedes vordefinierte oder deklarierte
    Metadatenfeld}{uniform setter name for every predefined or declared
    metadata field}.
  \command{OsgLecture}[\meta{Field}]\default{}
  \command{OsgLectureShort}[\meta{Field}]
    \ldeen{expandierbare Abfrage des Lang- beziehungsweise Kurzwerts}{expandable
    query of the long or short value, respectively}.
\end{commands}

\paragraph{\ldeen{Modi und bedingte Inhalte}{Modes and conditional content}.}
\begin{commands}
  \command{lecturemode}[\aarg{mode expression}\marg{content}]
    \ldeen{gibt den Inhalt aus, wenn mindestens einer der mit Komma oder
    \code{||} getrennten Modi aktiv ist; ohne Modusausdruck wird der Inhalt
    immer ausgegeben}{emits the content if at least one mode separated by a
    comma or \code{||} is active; without a mode expression it always emits the
    content}.
  \command{IfLectureModeTF}[\marg{expression}\marg{true}\marg{false}]
    \ldeen{vollständige Verzweigung}{full conditional}.
  \command{IfLectureModeT}[\marg{expression}\marg{true}]
    \ldeen{nur der Wahr-Zweig}{true branch only}.
  \command{IfLectureModeF}[\marg{expression}\marg{false}]
    \ldeen{nur der Falsch-Zweig}{false branch only}.
  \command{LectureModes}\default{}
  \command{ActiveLectureModes}
    \ldeen{expandierbare kommaseparierte Listen der gewählten Blattmodi
    beziehungsweise ihrer vollständigen Elternhülle}{expandable comma-separated
    lists of the selected leaf modes and their complete parent closure,
    respectively}.
\end{commands}

\ldeen{Die Befehle zur Erweiterung des Modusgraphen sind in
Abschnitt~\ref{sec:configuration-mode-extensions} zusammengefasst; sie gehören
zur Projekt- und Profilkonfiguration, nicht zum gewöhnlichen Schreiben einer
Unit.}{The commands for extending the mode graph are summarized in
Section~\ref{sec:configuration-mode-extensions}; they belong to project and
profile configuration rather than ordinary unit authoring.}

\paragraph{\ldeen{Präsentationslisten}{Presentation lists}.}
\begin{environments}
  \environment{presitemize}[\oarg{language, punctuation, whitespace}]
    \ldeen{erzeugt in Präsentationen eine Liste und in Langformen einen
    grammatisch verbundenen Absatz. \option{language} überschreibt die
    erkannte Sprache; \option{punctuation} akzeptiert \code{auto} oder
    \code{manual} und respektiert bei \code{auto} vorhandene Satzzeichen;
    \option{whitespace} akzeptiert \code{normalize} (Vorgabe) oder
    \code{preserve}}{produces a list in presentations and a grammatically joined
    paragraph in long forms. \option{language} overrides the detected language;
    \option{punctuation} accepts \code{auto} or \code{manual} and preserves
    existing punctuation in \code{auto} mode; \option{whitespace} accepts
    \code{normalize} (the default) or \code{preserve}}.
\end{environments}
\begin{commands}
  \command{presitem}[\oarg{relation, initial}\aarg{overlay}\oarg{label}]
    \option{relation}: \code{sentence}, \code{and}, \code{but},
    \code{therefore}, \code{comma}, \code{colon}; \option{initial}:
    \code{auto}, \code{keep}.
  \command{anditem}[\aarg{overlay}\oarg{label}]\default{}
  \command{butitem}[\aarg{overlay}\oarg{label}]\default{}
  \command{thereforeitem}[\aarg{overlay}\oarg{label}]\default{}
  \command{commaitem}[\aarg{overlay}\oarg{label}]\default{}
  \command{colonitem}[\aarg{overlay}\oarg{label}]
    \ldeen{Kurzformen für die entsprechenden Relationen; jede Form akzeptiert
    eine Overlayangabe und ein optionales Label wie \cs{item}}{short forms for
    the corresponding relations; each accepts an overlay specification and an
    optional label like \cs{item}}.
  \command{finite}[\marg{text}]
    \ldeen{markiert den finiten Teil einer untergeordnet angeschlossenen
    Formulierung}{marks the finite part of a subordinately joined clause}.
  \command{prespar}
    \ldeen{beginnt in der Langform einen neuen Absatz und schließt den
    laufenden Satz ab; in Präsentationen wirkungslos}{starts a new paragraph
    in long-form output and closes the running sentence; no effect in
    presentations}.
  \command{longform}\default{}
  \command{slides}\default{}
  \command{longslides}\default{}
  \command{prescase}\default{}
  \command{preskeepcase}
    \ldeen{niedrigstufige Auswahl- und Großschreibungshelfer für eigene
    Listenmakros}{low-level selection and capitalization helpers for custom
    list macros}.
\end{commands}

\paragraph{\ldeen{Zweispaltige Inhalte}{Two-column content}.}
\begin{environments}
  \environment{twocolumns}[\aarg{mode expression}\oarg{alignment, share,
    sep=length}]
    \ldeen{setzt zwei Teile nebeneinander, wenn der Modusausdruck erfüllt ist
    (Vorgabe \code{presentation}), sonst nacheinander}{typesets two parts side
    by side when the mode expression matches (default \code{presentation}),
    and consecutively otherwise}.
\end{environments}
\begin{commands}
  \command{nextcolumn}
    \ldeen{trennt die beiden Teile von \env{twocolumns}}{separates the two
    parts of \env{twocolumns}}.
\end{commands}

\paragraph{\ldeen{Verweise}{References}.}
\begin{commands}
  \command{olref}[\sarg\oarg{address}\marg{label}]
    \ldeen{Nummer wie \cs{ref}}{number like \cs{ref}}.
  \command{olpageref}[\sarg\oarg{address}\marg{label}]
    \ldeen{Seite wie \cs{pageref}}{page like \cs{pageref}}.
  \command{olnameref}[\sarg\oarg{address}\marg{label}]
    \ldeen{Name wie \cs{nameref}}{name like \cs{nameref}}.
  \command{olautoref}[\sarg\oarg{address}\marg{label}]
    \ldeen{automatischer Verweis wie \cs{autoref}}{automatic reference like
    \cs{autoref}}.
\end{commands}
\ldeen{Die Adresse besteht aus einer schlüssellosen Unit-ID und optional
\keyis{type}{doctype} sowie \keyis{lang}{language}. Ohne Adresse bleiben alle
vier Befehle lokal. Die Sternform unterdrückt wie bei den entsprechenden
Standardbefehlen den Hyperlink.}{The address consists of a keyless unit ID and
optional \keyis{type}{doctype} and \keyis{lang}{language}. Without an address,
all four commands remain local. As with the corresponding standard commands,
the starred form suppresses the hyperlink.}

\paragraph{\ldeen{Literatur}{Literature}.}
\begin{environments}
  \environment{literaturelist}[\oarg{label width}]
    \ldeen{kommentierte Leseliste; verfügbar, wenn die Literaturverwaltung
    eingeschaltet ist}{annotated reading list; available when bibliography
    management is enabled}.
\end{environments}
\begin{commands}
  \command{printseriesbibliography}[\oarg{options}]
    \ldeen{serienweites Literaturverzeichnis; \meta{options} wie bei
    \cs{printbibliography}}{series-wide bibliography; \meta{options} as for
    \cs{printbibliography}}.
  \command{litentry}[\marg{key}]
    \ldeen{vollständiger Eintrag mit Zitatlabel}{full entry with citation
    label}.
  \command{litgroup}[\marg{title}]
    \ldeen{beginnt eine Gruppe mit Überschrift}{starts a group with a
    heading}.
  \command{litcomment}[\oarg{label}\marg{text}]
    \ldeen{Kommentar zu den vorangehenden Einträgen}{comment on the preceding
    entries}.
\end{commands}
\ldeen{Zitier- und Verzeichnisbefehle sind die von \pkg{biblatex}, etwa
\cs{cite} und \cs{printbibliography}.}{Citation and bibliography commands
are those of \pkg{biblatex}, such as \cs{cite} and \cs{printbibliography}.}
