zpl.tools
Label geometry

^LT - Label Top

Shifts every field up or down by a small number of dot rows.

^LT moves a finished label up or down with no edit to its coordinates. It is a registration adjustment: the ±120 dot-row limit is about 15 mm at 8 dot/mm, enough to correct stock that feeds slightly high or low and no more. Outside that range the renderer ignores the command and does not clamp it, so ^LT200 shifts nothing at all and reports no error visible on the page.

Syntax

^LTx

Support

Supportedparsed: full · state: full · rendered: full

Every documented parameter renders the same output Labelary produces.

Labelary renders this command.

Parameters

xLabel topoptional · dots

Dot rows to move the whole label down. A negative value moves it up.

Default
the previous ^LT in this format, or 0
Accepted range
-120 to 120 dot rows
Invalid value
enough to make the whole command be ignored. A value beyond ±120 does **not** clamp. The renderer discards the argument, so the distance already in force stands. A missing or non-numeric argument does the same. We measured this against Labelary and the renderer on 2026-07-29 and again on 2026-08-19: ^LT120 shifts by 120 dot rows, ^LT121 on its own shifts by nothing, and ^LT50^LT121 still shifts by 50. The narrow range is a printer registration adjustment, not a general layout tool. Use ^LH for layout.
Test coverage
Bounds pinned: maximum (120), above the maximum (121). No test at the minimum. The invalid-value rule is pinned by 6 tests.

Behavior

The renderer folds ^LH and ^LS in as it places each field, and applies ^LT once to the whole assembled label. Two consequences follow. We measured both against Labelary, and both match:

  • an ^LT after a field still moves that field, so its position in the format does not matter;
  • where a format carries more than one ^LT, the last one governs the entire label, and no ^LT governs only the fields that follow it.

^LT30 and then ^LT60 therefore shift everything by 60, not by 30 then 90.

The out-of-range rule applies to every value the printer cannot read as a number in range: ^LT121, ^LT999, ^LTQ and a bare ^LT all leave the label unshifted. Under ^MU the renderer checks the limit after conversion, so ^MUI^LT1 asks for 200 dot rows, exceeds 120, and does nothing at all.

A positive value moves down and a negative value moves up, the ordinary ZPL sense, in contrast to ^LS, where a positive value moves left. The guide carries a warning worth repeating for real hardware: on some printer models a large negative value backs the media out of the platen. That cannot happen here, but a format that carries one misbehaves on a printer.

^LT does not move the media rest position. It shifts the image on the label and does not change where the label stops.

Tested behavior

Example

Two bars 100 dot rows apart, with ^LT60 between them. Both move down by 60 — the first one too, even though it was written before the command:

^XA
^FO50,40^GB300,30,30^FS
^LT60
^FO50,140^GB300,30,30^FS
^XZ

Open in viewer