Meanwhile and track

Sometimes, you want to show multiple things at the same time, but not necessarily all of them. For example, you might want to show a list of items, and then reveal them one by one, but also have some items that are always visible. This is where the #meanwhile and #track commands come in handy.

Meanwhile

#meanwhile splits a slide’s top-level content into parallel tracks at the point it appears, each carrying its own local #pause sequence instead of one long chain. All tracks advance together on the same subslide clock, so content before and after #meanwhile can reveal independently while staying in sync. For example, First #pause Second #meanwhile Third #pause Fourth shows First and Third on the first step, then all four on the second. This mirrors Touying’s #meanwhile directly and requires no wrapper function, #pause and #meanwhile are the only markers needed.

#slide[`#meanwhile` example][
  First

  #pause

  Second

  #meanwhile

  Third

  #pause

  Fourth
]

Track

track provides the same parallel-track behavior as #meanwhile, exposed as a function rather than a flow marker, for the one case #meanwhile can’t reach on its own: content nested inside a #grid(..) or #columns(..). Since #meanwhile, like #pause, only sees a slide’s direct top-level children, wrapping each column’s content in track(..) lets every column carry its own independent #pause sequence while still advancing on the same subslide clock as the rest of the slide. Use #meanwhile for a linear flow with parallel timing, and track(..) when that parallel content needs to live side by side in a layout container.

#slide[`#track` example][
  #grid(
    columns: (1fr, 1fr),
    align: top,
    column-gutter: 1em,
    track[
      First point #pause

      Second point #pause

      Third point
    ],
    track[
      First parallel #pause

      Second parallel
    ]
  )
]