# Vertical series example -- classic variant This example is a small end-to-end case study for the current OLLM and `osglecture` contracts, built entirely on document types that do not use `\DocumentMetadata`. It contains two logical units and no integration unit. Each logical unit builds as a Beamer presentation (`slides`) and a KOMA-Script long-form report (`script`, using `scrbook`). The second unit refers to a labelled section in the first one. For the newer, `\DocumentMetadata`-based style (`ltx-talk` + `book`, selected through the same built-in targets, plus a `tagpax`-tagged integration unit and a project-local `solutions` target for exercises), see the sibling example `../series-modern`. ## Structure ```text series-classic/ ├── ollmconfig.toml ├── Include/ │ └── projectconfig.tex ├── 010-introduction/main.tex └── 020-application/main.tex ``` OLLM discovers `ollmconfig.toml` from either unit directory. Shared TeX files live in `Include`; there is deliberately no TeX material in the project root. The manifest uses the default directory and configuration filenames explicitly, so the relevant build contract remains visible in this example. The manifest selects the document profiles in `[targets.defaults]`: `presentation_profile = "beamer"` and `longform_profile = "scrbook"`. Both are built-in osglecture profiles, so no project-local profile or target definition is needed here -- that is the point of this variant: it is the plain, unextended path through osglecture. (These two are also the bundle preset's defaults, so the lines could be omitted; they are spelled out here to keep the contract visible.) Beamer's `document-metadata` capability is `forbidden`, so `\DocumentMetadata` stays off for `slides`; `scrbook` merely `supports` it, and this example leaves `document_metadata` unset, so the derived policy is `disabled` there too -- a document type pairing that predates the `\DocumentMetadata` kernel feature entirely. ## Cross-unit references The unit sources use the profile-independent `section`, `frame`, and `frametitle` interfaces directly. Beamer retains its native frame scanner, while the long-form adapter treats a frame as a content container and suppresses its frame title by default. The sources additionally exercise: - logical unit declarations with stable IDs; - `presitemize` as list versus connected prose; - presentation-default `twocolumns` behaviour; - a cross-unit `\olref` resolved through OLLM's promoted reference state, rendered as a working external link (`GoToR`) -- without `\DocumentMetadata`, `\olref` builds this link itself from the same low-level primitives hyperref's own classic backend uses, rather than through the newer `l3pdfannot` API, which requires `\DocumentMetadata` to be active; - continuation of page and section counters in the long form. There is no integration unit in this variant: `tagpax` (used by `\includeunit` in `series-modern`) needs a document with tagging active and therefore needs `\DocumentMetadata`, which this example deliberately does not use. ## Build sequence Run the following commands from the named unit directories. The producing unit must be built before the consuming unit so that OLLM can register its promoted reference export. ```sh cd 010-introduction ollm build slides ollm build script cd ../020-application ollm build slides ollm build script ``` The second unit then links to the matching `introduction` projection: `slides` and `script` each refer to the same target and language in the first unit. Rebuilding the second unit may be necessary after changing a label in the first unit. Automated dependency-fixpoint builds are available through `ollm build --resolve`; the explicit order above remains useful for showing the initial bootstrap in which the producing unit's logical ID is not yet known to OLLM. To inspect the BuildSpecs without invoking LaTeX, run `ollm build --all --dry-run` in the project. ## Expected defaults | Target | Profile class | Concrete profile | Behaviour | |---|---|---|---| | `slides` | `presentation` | `beamer` | frames, itemized presentation lists, real columns | | `script` | `longform` | `scrbook` | sections, connected prose, column contents in sequence | The profile selection lives in the manifest: ```toml [targets.defaults] presentation_profile = "beamer" longform_profile = "scrbook" ```