Heiko Oberdiek wrote:
On Tue, Nov 01, 2011 at 06:07:59PM +0100, Arno Trautmann wrote:
Heiko Oberdiek wrote:
A rotation using
\rotatebox{...} with pdftex.def gives an example.

There's no \rotatebox in pdftex.def, neither a \Grot@box@kv or
anything. But I guess that's not what you meant?

Package graphics+pdftex.def.

Ok, I've tried to understand the definition of \rotatebox and what's going on, and partially was successfull … but I don't see how that can help me here now – if it's only about using pdf_save and _restore, I get along now.

Anyhow, for the following I stuck to pdf_literal (I want to use the last two parameters of cm later), but get the same result with _save, _setmatrix and _restore. And I don't like the result: In the first line of the second paragraph, I use the rotation once, which results in a shift of the /second/ line by the width of the rotated glpyh to the left. The third line is shifted even more, as in the second line I have more rotations (all uppercase letters). Something goes terribly wrong here, but I do not manage to understand my mistakes. So, I'd be happy for any explanation about what's going on here …

cheers
Arno

\documentclass{minimal}
\usepackage{luacode}

\begin{document}
Nicht geaenderter Absatz.\\
Mit zwei Zeilen.

\begin{luacode*}
function rotateglyph(head)

-- definition of the nodes used below
scor = node.new(11)      -- kern

rotstart = node.new(8,8) -- whatsit of type pdf_literal
rotstop = node.new(8,8) -- whatsit of type pdf_literal
rotstart.data = "q 0.87 -0.5 0.5 0.87 0 0 cm "
rotstop.data = " Q "
rotstart.mode = 0
rotstop.mode =  0
 -- with 1 or 2 for mode, the shift does not happen,
 -- but the glyphs are gone.

  for line in node.traverse_id(node.id"hhead",head) do
    for n in node.traverse_id(node.id"glyph",line.list) do
      if (n.char > 64 and n.char < 91) then -- uppercase letter
        scor.kern = n.width*0.87+n.height*0.5
        line.list =
          node.insert_before(line.list,n,node.copy(rotstart))
        node.insert_after(line.list,n,node.copy(scor))
        node.insert_after(line.list,n,node.copy(rotstop))
      end
    end
  end

  return head
end

luatexbase.add_to_callback("post_linebreak_filter",rotateglyph,"rotate")
\end{luacode*}

dies Hier ist ein blindtext zum testen von textausgaben.
wer diesen text liest, ist\\ selbst schuld.
Der Text gibt lediglich den Grauwert der Schrift
an. Ist das wirklich so oder kann auch ein anderer Text

\end{document}

Reply via email to