Einrichten von PDF-Gliederungen aus Lua

Einrichten von PDF-Gliederungen aus Lua

In neueren Versionen von LuaTeX kann die PDF-Gliederungshierarchie von der TeX-Seite aus mit eingerichtet werden \pdfextension outline; zum Beispiel:

\pdfextension outline goto page \the\c@page {} count 1 {Chapter 1}
\pdfextension outline attr{/F 1} goto name{label} {Section 1.1}

Ich würde das gerne von Lua aus machen. So etwas wie:

pdf.setoutlines( whatever )

… aber eine solche Schnittstelle gibt es nicht.

Ich habe darüber nachgedacht, mit Roh-PDF-Objekten zu arbeiten pdf.immediateobj, aber ich weiß nicht, wie das geht. Wenn es auf diese Weise möglich ist, könnten Sie bitte eine Beispielhierarchie zeigen?

Antwort1

Ja, Sie müssten Roh-PDF-Objekte ausgeben. Hier ist ein Minimalbeispiel, bestehend aus zwei mit Lesezeichen versehenen Seiten.

Die Datei outlines-example.tex(kompilieren Sie sie mit plain luatex):

This is the first page.
\vfil\break
This is the second page.
\directlua{require('outline-examples')}
\bye

Die Datei outlines-example.lua:

-- Reserve all object numbers beforehand
local first, second, outlines =
  pdf.reserveobj(), pdf.reserveobj(), pdf.reserveobj()

-- Write out the bookmarks
pdf.immediateobj(first, string.format(
  '<< /Title (First page) /Parent %d 0 R /Next %d 0 R /Dest [0 /XYZ] >>',
    outlines, second))
pdf.immediateobj(second, string.format(
  '<< /Title (Second page) /Parent %d 0 R /Prev %d 0 R /Dest [1 /XYZ] >>',
    outlines, first))

-- Write out the outline dictionary
pdf.immediateobj(outlines, string.format(
  '<< /Type/Outlines /First %d 0 R /Last %d 0 R /Count 2 >>',
    first, second))

-- Add the outline dictionary to the document catalog
pdf.setcatalog(string.format(
  '%s /Outlines %d 0 R',
    pdf.getcatalog() or '', outlines))

verwandte Informationen