Configurando contornos de PDF de Lua

Configurando contornos de PDF de Lua

Nas versões recentes do LuaTeX, a hierarquia de contorno do PDF pode ser configurada no lado do TeX com \pdfextension outline; por exemplo:

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

Eu gostaria de fazer isso de Lua. Algo como:

pdf.setoutlines( whatever )

… mas não existe essa interface.

Pensei em usar objetos PDF brutos usando pdf.immediateobj, mas não sei como fazer isso. Se for possível fazer isso dessa forma, você poderia mostrar um exemplo de hierarquia?

Responder1

Sim, você teria que escrever objetos PDF brutos. Aqui está um exemplo mínimo, que consiste em duas páginas marcadas.

O arquivo outlines-example.tex(compile-o com plain luatex):

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

O arquivo 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))

informação relacionada