Gibt es in LuaLaTeX ein Pendant zum Befehl \XeTeXglyph, um ein einzelnes Schriftzeichen aus der Zeichenpalette auszuwählen? Zwar existiert in LuaLaTeX der Befehl char, der allerdings greift nicht wie \XeTeXglyph auf die Glyph ID eines Schriftzeichens, sondern auf die Zeicheninformation zu.

Code, hier editierbar zum Übersetzen:
\documentclass[12pt]{article}
\usepackage{fontspec}
\usepackage{unicode-math}
\begin{document}
\XeTeXglyph500
\end{document}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

In XeLaTeX erhalte ich nun dieses Zeichen ”, während ich in LuaLaTeX, wenn ich \XeTeXglyph500 durch \char500 ersetze, dieses Zeichen Ǵ erhalte.

gefragt 24 Jun '13, 10:00

Seve's gravatar image

Seve
2225612
Akzeptiert-Rate: 100%

bearbeitet 25 Jun '13, 11:32

cgnieder's gravatar image

cgnieder
22.1k253463


\XeTeXglyph greift ja auf den glyph slot zu. Der ist eigentlich nicht sehr zuverlässig, da er sich bereits zwischen unterschiedlichen Versionen des gleichen Fonts ändern kann. Anders gesagt: Die Nummer unter der das Zeichen im Font gespeichert ist, ist im Gegensatz zur Unicode-Nummer des Zeichens eher zufällig. Wenn möglich würde ich also auch unter XeTeX zum unicode character slot mit \char raten. Der ändert sich von Version zu Version des Fonts nicht und ist sogar über Font-Grenzen hinweg eindeutig.

Nichts desto trotz ist bei LuaTeX laut Abschnitt 6.2 der aktuellen LuaTeX-0.76.0-Anleitung ein Pedant namens \glyph geplant. Derzeit existiert dies allerdings noch nicht. Stattdessen kann es auch geschehen, dass sich die Definition von \char noch einmal ändert.

Theoretisch könnte man über die characters Tabelle eines Fonts zu einem ähnlichen Ergebnis gelangen. Da aber die Tabelle nicht in der Reihenfolge der gewünschten Nummern sortiert ist, sondern diese als Element index in derselben gespeichert ist, muss man zunächst das passende Element suchen:

Code, hier editierbar zum Übersetzen:
\documentclass{article}
\usepackage{fontspec}
\usepackage{unicode-math}
\usepackage{luacode}
\begin{luacode}
-- Setze das Zeichen zum Glyphen mit der Nummer charNo
function LuaTeXglyph(charNo)
-- aktuellen font holen
local fontNo=font.current()
local f=font.getfont(fontNo)
local i
local v
local found=false
-- Schleife über alle Zeichen im Font (kann dauern!)
for i,v in pairs(f.characters) do
-- Wenn die glyph-Nummer charNo ist …
if v.index == charNo
then
-- … Zeichen ausgeben und fertig
tex.print( '\\char '..i..' ' )
found=true
break
end
end
-- Fehlerbehandlung falls kein glyph gefunden:
if not found
then
tex.error( 'font has no glyphen '..charNo )
end
end
\end{luacode}
\newcommand*{\LuaTeXglyph}[1]{%
\directlua{LuaTeXglyph(#1)}
}
\begin{document}
\LuaTeXglyph{500}
\end{document}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Die Idee dazu habe ich von Herberts Antwort genommen. Allerdings funktioniert diese Lösung hier für den aktuellen Font. Die Lua-Funktion LuaTeXglyph lässt sich bestimmt noch optimieren. Ich bin leider alles andere als ein Lua-Experte. Zumindest liefert das in meinen Tests aber dasselbe Zeichen wie \XeTeXglyph 500.

Permanenter link

beantwortet 24 Jun '13, 10:45

saputello's gravatar image

saputello
11.1k174365
Akzeptiert-Rate: 51%

bearbeitet 25 Jun '13, 12:36

Danke für die schnelle und ausführliche Antwort. Dann werde ich mich wohl noch etwas gedulden müssen.

(24 Jun '13, 11:08) Seve
2

@Seve: Wenn Du das bald benötigst, solltest Du Dich eventuell an die LuaTeX-Mailingliste (<mailto:luatex@tug.org>) wenden. Der Hinweis, dass entweder \char sich nochmal ändern wird oder ein \glyph benötigt wird, war nämlich bereits in der Anleitung zu LuaTeX-0.70.1 enthalten. Manchmal beschleunigen sich Dinge erst, wenn man gezielt danach fragt.

(24 Jun '13, 11:57) saputello

Du kannst dir die Funktion nachbauen, da LuaTeX ja eine Zuordnung Glyph<->Unicodenummer erstellt:

Code, hier editierbar zum Übersetzen:
\documentclass[12pt]{article}
\usepackage{fontspec}
\usepackage{luacode}
\def\LuaTeXglyph#1#2{\directlua{Luaglyph(#1,#2)}}
\begin{luacode}
function Luaglyph(font,i)
local fontWithDir=kpse.find_file(font,"opentype fonts")
local f = fontloader.open(fontWithDir)
local g = f.glyphs[i]
if g then
tex.sprint("\\char" .. g.unicode)
print("Unicodenummer: " .. g.unicode)
end
fontloader.close(f)
end
\end{luacode}
\begin{document}
\Huge
\LuaTeXglyph{"lmroman12-regular.otf"}{500}
\LuaTeXglyph{"lmroman12-regular.otf"}{100}
\end{document}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Permanenter link

beantwortet 24 Jun '13, 13:18

Herbert's gravatar image

Herbert
5.1k34
Akzeptiert-Rate: 31%

Vielen Dank, so etwas hatte ich gesucht.

(25 Jun '13, 10:35) Seve
Deine Antwort
[Vorschau ausblenden]

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Frage-Themen:

×78
×28
×9

gestellte Frage: 24 Jun '13, 10:00

Frage wurde gesehen: 12,285 Mal

zuletzt geändert: 25 Jun '13, 12:36