<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>LuaTeX - Neuigkeiten und Wissenswertes zu LuaTeX</title>
	<atom:link href="http://www.luatex.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.luatex.de</link>
	<description>Neuigkeiten und Wissenswertes zu LuaTeX</description>
	<lastBuildDate>Fri, 11 Nov 2011 10:22:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>DANTE 2012 in Leipzig</title>
		<link>http://www.luatex.de/2011/11/dante-2012-in-leipzig/</link>
		<comments>http://www.luatex.de/2011/11/dante-2012-in-leipzig/#comments</comments>
		<pubDate>Fri, 11 Nov 2011 10:22:11 +0000</pubDate>
		<dc:creator>Patrick Gundlach</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Konferenz]]></category>

		<guid isPermaLink="false">http://www.luatex.de/?p=390</guid>
		<description><![CDATA[Nun gibt es einen Termin für die nächste DANTE Frühjahrstagung in Leipzig: 7. bis 9. März 2012. (Das überschneidet sich zum Glück nicht mit dem Markupforum 2012, auf dem ich unseren Publisher vorstellen werde). Die Webseite dazu ist: www.dante.de/events/dante2012.html.]]></description>
			<content:encoded><![CDATA[<p>Nun gibt es einen Termin für die nächste DANTE Frühjahrstagung in Leipzig: 7. bis 9. März 2012. (Das überschneidet sich zum Glück nicht mit dem <a href="http://markupforum.de/" title="markupforum 2012">Markupforum 2012</a>, auf dem ich <a href="http://www.speedata.de/publisher">unseren Publisher</a> vorstellen werde). Die Webseite dazu ist: <a href="http://www.dante.de/events/dante2012.html" title="DANTE 2012 in Leipzig">www.dante.de/events/dante2012.html</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.luatex.de/2011/11/dante-2012-in-leipzig/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Callback-Beispiele</title>
		<link>http://www.luatex.de/2011/10/callback-beispiele/</link>
		<comments>http://www.luatex.de/2011/10/callback-beispiele/#comments</comments>
		<pubDate>Tue, 11 Oct 2011 06:04:10 +0000</pubDate>
		<dc:creator>Patrick Gundlach</dc:creator>
				<category><![CDATA[Hacker]]></category>
		<category><![CDATA[callbacks]]></category>
		<category><![CDATA[tex.se]]></category>

		<guid isPermaLink="false">http://www.luatex.de/?p=382</guid>
		<description><![CDATA[Ich bin gelegentlich auf der q&#038;a Seite tex.stackexchange.com aktiv und beantworte schonmal die eine oder andere Frage. Vor Kurzem gab es wieder ein paar LuaTeX Fragen und ich habe dort ein paar Antworten gegeben, die die pre_linebreak_filter und post_linebreak_filter callbacks in Aktion zeigen. Hier die Links: Can I have the \overfullrule rule colored in pdfLaTeX? [...]]]></description>
			<content:encoded><![CDATA[<p>Ich bin gelegentlich auf der <a href="http://tex.stackexchange.com/" title="question and answer site tex.stackexchange ">q&#038;a Seite tex.stackexchange.com</a> aktiv und beantworte schonmal die eine oder andere Frage. Vor Kurzem gab es wieder ein paar LuaTeX Fragen und ich habe dort ein paar Antworten gegeben, die die <code>pre_linebreak_filter</code> und  <code>post_linebreak_filter</code> callbacks in Aktion zeigen. Hier die Links:</p>
<ul>
<li><a href="http://tex.stackexchange.com/q/28294/243">Can I have the <code>\overfullrule</code> rule colored in pdfLaTeX?</a></li>
<li><a href="http://tex.stackexchange.com/q/27780/243">one-letter word at the end of line</a></li>
<li><a href="http://tex.stackexchange.com/q/28357/243">Ensure minimal length of last line</a></li>
<li><a href="http://tex.stackexchange.com/q/28064/243">How to display only certain lines of a paragraph?</a></li>
<li><a href="http://tex.stackexchange.com/q/28136/243">LaTeX not hyphenating properly, text running off page</a></li>
</ul>
<p>Ansonsten möchte ich noch einmal auf das <a href="http://wiki.luatex.org/index.php/Main_Page">LuaTeX-Wiki</a> verweisen, das sich langsam, aber sicher, füllt.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.luatex.de/2011/10/callback-beispiele/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LuaLaTeX und das Euro-Zeichen</title>
		<link>http://www.luatex.de/2011/10/lualatex-und-das-euro-zeichen/</link>
		<comments>http://www.luatex.de/2011/10/lualatex-und-das-euro-zeichen/#comments</comments>
		<pubDate>Sat, 08 Oct 2011 17:47:30 +0000</pubDate>
		<dc:creator>Patrick Gundlach</dc:creator>
				<category><![CDATA[LuaLaTeX]]></category>

		<guid isPermaLink="false">http://www.luatex.de/?p=372</guid>
		<description><![CDATA[Gestern habe ich die Frage gestellt bekommen, &#8230; &#8230; ob man mit LuaLaTeX und geeigneten Fonts auf ein Paket wie eurosym verzichen kann weil es ja vielleicht ein ordentliches Eurozeichen in den Fonts direkt gibt? Unter XeLaTex und LuaLaTeX lassen sich dank fontspec alle Zeichen der Fonts direkt ansprechen. Als Eingabe muss nur das Unicode-Zeichen [...]]]></description>
			<content:encoded><![CDATA[<p>Gestern habe ich die Frage gestellt bekommen, &#8230;</p>
<blockquote><p>&#8230; ob man mit LuaLaTeX und geeigneten Fonts auf ein Paket wie <em>eurosym</em> verzichen kann weil es ja vielleicht<br />
ein ordentliches Eurozeichen in den Fonts direkt gibt?</p></blockquote>
<p>Unter XeLaTex und LuaLaTeX lassen sich dank <em>fontspec</em> alle Zeichen der Fonts direkt ansprechen. Als Eingabe muss nur das Unicode-Zeichen (als UTF-8 kodiert) direkt benutzt werden. Manche Zeichen lassen sich auch wie bisher mit Befehlen ansprechen. Siehe dieses Beispiel:</p>
<pre>\documentclass{article}
\usepackage{fontspec}
\newcommand\satz{Das Kaugummi kostet 3€ – oder waren es nur 2\texteuro?\par}
\begin{document}
\satz
\setmainfont{Linux Libertine O}
\setsansfont{DejaVuSans}
\satz \sf \satz
\end{document}</pre>
<p>Ergibt:</p>
<p><a href="http://www.luatex.de/wp-content/uploads/2011/10/kaugummi.png"><img class="alignnone size-full wp-image-374" title="kaugummi" src="http://www.luatex.de/wp-content/uploads/2011/10/kaugummi.png" alt="Beispiele für das Euro-Zeichen" width="673" height="103" style="margin-top: 30px; margin-bottom:30px" /></a></p>
<p>Der Befehl <kbd>\texteuro</kbd> kommt übrigens aus dem Paket <em>xunicode</em>. Pakete wie <em>eurosym</em> sollten der Vergangenheit angehören. Herzlichen Dank an den Fragesteller!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.luatex.de/2011/10/lualatex-und-das-euro-zeichen/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>LuaTeX-Buch</title>
		<link>http://www.luatex.de/2011/09/luatex-buch-vorschlaege/</link>
		<comments>http://www.luatex.de/2011/09/luatex-buch-vorschlaege/#comments</comments>
		<pubDate>Fri, 09 Sep 2011 08:39:51 +0000</pubDate>
		<dc:creator>Patrick Gundlach</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://www.luatex.de/?p=367</guid>
		<description><![CDATA[Ich bin gerade in der Hochphase meines LuaTeX Buchs &#8211; wer noch Themenwünsche hat, möge bitte einen Kommentar hier hinterlassen! Ich kann natürlich nichts versprechen, außer, dass ich über alle Vorschläge intensiv nachdenken werde.]]></description>
			<content:encoded><![CDATA[<p>Ich bin gerade in der Hochphase meines <a href="https://www.opensourcepress.de/index.php?26&#038;backPID=178&#038;tt_products=325" title="LuaTeX-Buch">LuaTeX Buchs</a> &#8211; wer noch Themenwünsche hat, möge bitte einen Kommentar hier hinterlassen! Ich kann natürlich nichts versprechen, außer, dass ich über alle Vorschläge intensiv nachdenken werde.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.luatex.de/2011/09/luatex-buch-vorschlaege/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>DANTE Herbsttagung</title>
		<link>http://www.luatex.de/2011/07/dante-herbsttagung-2011/</link>
		<comments>http://www.luatex.de/2011/07/dante-herbsttagung-2011/#comments</comments>
		<pubDate>Tue, 26 Jul 2011 10:42:36 +0000</pubDate>
		<dc:creator>Patrick Gundlach</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://www.luatex.de/?p=360</guid>
		<description><![CDATA[Jetzt ist wieder einige Zeit vergangen, ohne dass hier sichtbare Veränderungen stattgefunden haben. Die LuaTeX-Entwicklung ist wie immer ruhig, aber stetig. Demnächst (19.-24. September) gibt es eine ConTeXt-Konferenz in Belgien, wo auch natürlich die LuaTeX-Experten anwesend sein werden. Anschließend (30. September bis 1. Oktober) gibt es noch die DANTE Herbsttagung, aber leider genau am anderen [...]]]></description>
			<content:encoded><![CDATA[<p>Jetzt ist wieder einige Zeit vergangen, ohne dass hier sichtbare Veränderungen stattgefunden haben. Die LuaTeX-Entwicklung ist wie immer ruhig, aber stetig. Demnächst (19.-24. September) gibt es eine <a title="ConTeXt meeting 2011" href="http://meeting.contextgarden.net/2011/">ConTeXt-Konferenz</a> in Belgien, wo auch natürlich die LuaTeX-Experten anwesend sein werden. Anschließend (30. September bis 1. Oktober) gibt es noch die <a title="DANTE Herbsttagung" href="http://www.dante.de/events/mv45.html">DANTE Herbsttagung</a>, aber leider genau am anderen Ende der Republik (in Garmisch-Patenkirchen) &#8211; so dass ich nicht hinfahren werde (Berlin-Garmisch sind gut 8 Stunden mit der Bahn). Vielleicht gibt es dort LuaTeX Tutorien? Auf der nächsten DANTE Frühjahrstagung (wo/wann auch immer diese stattfindet) werde ich unseren <a title="speedata Publisher" href="http://speedata.github.com/publisher/">Publisher</a> vorstellen, dessen Quellcode bald offiziell veröffentlich wird. <a title="Quellcode speedata Publisher auf github" href="https://github.com/speedata/publisher">Für Interessierte steht er aber jetzt schon zur Verfügung</a>. Helfende Hände sind hier immer willkommen!</p>
<p>Nachtrag: die DANTE 2012 ist wohl in Leipzig&#8230; Das ist zum Glück um die Ecke!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.luatex.de/2011/07/dante-herbsttagung-2011/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Versal &#8211; SZ mit LuaTeX</title>
		<link>http://www.luatex.de/2011/07/versal-sz-mit-luatex/</link>
		<comments>http://www.luatex.de/2011/07/versal-sz-mit-luatex/#comments</comments>
		<pubDate>Tue, 26 Jul 2011 07:19:00 +0000</pubDate>
		<dc:creator>Patrick Gundlach</dc:creator>
				<category><![CDATA[LuaLaTeX]]></category>
		<category><![CDATA[fonts]]></category>

		<guid isPermaLink="false">http://www.luatex.de/?p=355</guid>
		<description><![CDATA[Gerade habe ich eine Frage in meinem Mail-Postfach gefunden: Wie kann ich das Versal-ß unter LuaTeX benutzen? Die Antwort ist einfach: so wie es Unicode vorschlägt. Nur musst du eine Schriftart haben, wo dieses Ungetüm enthalten ist: \documentclass{article} \usepackage[german]{babel} \usepackage{fontspec} \setmainfont{Linux Libertine O} \begin{document} Das Mädchen ging über die Brücke nach draußen. DAS MÄDCHEN GING [...]]]></description>
			<content:encoded><![CDATA[<p>Gerade habe ich eine Frage in meinem Mail-Postfach gefunden: Wie kann ich das Versal-ß unter LuaTeX benutzen? Die Antwort ist einfach: so wie es Unicode vorschlägt. Nur musst du eine Schriftart haben, wo dieses Ungetüm enthalten ist:</p>
<pre>\documentclass{article}
\usepackage[german]{babel}
\usepackage{fontspec}
\setmainfont{Linux Libertine O}
\begin{document}
Das Mädchen ging über die Brücke nach draußen.

DAS MÄDCHEN GING ÜBER DIE BRÜCKE NACH DRAUẞEN.
\end{document}</pre>
<p>Gibt bei mir (TeXlive 2010) ein ordentliches PDF, das das Versal-sz auch per Copy/Paste überträgt.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.luatex.de/2011/07/versal-sz-mit-luatex/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DANTE 2011</title>
		<link>http://www.luatex.de/2011/01/dante-2011/</link>
		<comments>http://www.luatex.de/2011/01/dante-2011/#comments</comments>
		<pubDate>Thu, 27 Jan 2011 16:00:27 +0000</pubDate>
		<dc:creator>Patrick Gundlach</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Konferenz]]></category>

		<guid isPermaLink="false">http://www.luatex.de/?p=351</guid>
		<description><![CDATA[Ich habe es zwar schon gezwitschert, doch ein Blogeintrag bringt mehr Aufmerksamkeit: vom 30.3.2011 bis zum 1.4.2011 findet in Bremen die diesjährige DANTE-Tagung statt. Neben der obligatorischen Mitgliederversammlung gibt es wieder ein reichhaltiges Vortragsprogramm, bei dem LuaTeX dieses Jahr hoffentlich eine besondere Aufmerksamkeit bekommt. Wenn ihr also unentschlossen seid, ob ihr nach Bremen fahren sollt: [...]]]></description>
			<content:encoded><![CDATA[<p>Ich habe es zwar schon <a title="Twitter Nachricht" href="https://twitter.com/#!/luatex_de/status/29978934032474113">gezwitschert</a>, doch ein Blogeintrag bringt mehr Aufmerksamkeit: vom <a title="DANTE 2011 Tagung" href="http://www.dante.de/events/dante2011.html">30.3.2011 bis zum 1.4.2011 findet in Bremen die diesjährige DANTE-Tagung</a> statt. Neben der obligatorischen Mitgliederversammlung gibt es wieder ein reichhaltiges Vortragsprogramm, bei dem LuaTeX dieses Jahr hoffentlich eine besondere Aufmerksamkeit bekommt. Wenn ihr also unentschlossen seid, ob ihr nach Bremen fahren sollt: macht es. Bremen ist sehr schön! Und wenn ihr gar ein Tutorium oder einen Vortrag halten wollt wäre das ja noch besser. Ich bin schon angemeldet und einen Vortrag wird es von mir sicherlich auch geben. Jetzt muss ich mir nur noch ein Thema überlegen. Wünsche?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.luatex.de/2011/01/dante-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fontloader + Microtype</title>
		<link>http://www.luatex.de/2011/01/fontloader-microtype/</link>
		<comments>http://www.luatex.de/2011/01/fontloader-microtype/#comments</comments>
		<pubDate>Wed, 12 Jan 2011 12:45:51 +0000</pubDate>
		<dc:creator>Patrick Gundlach</dc:creator>
				<category><![CDATA[Hacker]]></category>
		<category><![CDATA[Experten]]></category>
		<category><![CDATA[fonts]]></category>
		<category><![CDATA[microtype]]></category>

		<guid isPermaLink="false">http://www.luatex.de/?p=345</guid>
		<description><![CDATA[Kürzlich habe ich den Fontloader um Ligaturen erweitert, heute geht&#8217;s um das HZ-Programm, speziell Font expansion. Auch hier werde ich den ursprünglichen Artikel entsprechend erweitern und hier nur die Änderungen vorstellen. Im Gegensatz zu den Ligaturen ist die Erweiterung um Font expansion sehr kurz. Sie besteht aus zwei Schritten. Zum einen musst du die Erweiterungen [...]]]></description>
			<content:encoded><![CDATA[<p><a title="Fontloader und Ligaturen" href="http://www.luatex.de/2011/01/fontloader-ligaturen/">Kürzlich</a> habe ich den Fontloader um Ligaturen erweitert, heute geht&#8217;s um das HZ-Programm, speziell Font expansion. Auch hier werde ich den <a title="Fontloader in LuaTeX" href="http://www.luatex.de/2010/04/eigenen-fontloader-erstellen/">ursprünglichen Artikel</a> entsprechend erweitern und hier nur die Änderungen vorstellen.</p>
<p>Im Gegensatz zu den Ligaturen ist die Erweiterung um Font expansion sehr kurz. Sie besteht aus zwei Schritten. Zum einen musst du die Erweiterungen für TeXs Umbruchalgorithmus mit <code>\pdfadjustspacing=2</code> aktivieren und zum anderen musst du beim Laden der Schriftart die richtigen Parameter setzen:</p>
<pre>f.stretch = 30
f.shrink  = 20
f.step    = 10
f.auto_expand = true
</pre>
<p>Diese Parameter gelten für die Schriftart und müssen im Fontobjekt gesetzt werden. Den Parameter <code>expansion_factor</code> setzt du für jedes Zeichen separat. Z.B.</p>
<pre> f.characters[codepoint].expansion_factor = 1000
</pre>
<p>Die Bedeutung der Parameter kannst du im <a title="PDFTeX Handbuch (PDF, englisch)" href="http://sarovar.org/docman/view.php/106/64/pdftex-a.pdf.pdf">PDFTeX-Handbuch (PDF)</a> nachlesen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.luatex.de/2011/01/fontloader-microtype/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LuaLaTeX: Zeige die Trennstellen</title>
		<link>http://www.luatex.de/2011/01/lualatex-zeige-die-trennstellen/</link>
		<comments>http://www.luatex.de/2011/01/lualatex-zeige-die-trennstellen/#comments</comments>
		<pubDate>Tue, 11 Jan 2011 16:00:04 +0000</pubDate>
		<dc:creator>Patrick Gundlach</dc:creator>
				<category><![CDATA[LuaLaTeX]]></category>
		<category><![CDATA[callbacks]]></category>
		<category><![CDATA[Hacker]]></category>
		<category><![CDATA[Silbentrennung]]></category>

		<guid isPermaLink="false">http://www.luatex.de/?p=335</guid>
		<description><![CDATA[Weil ich gerade selbst an Silbentrennung arbeite, gibt&#8217;s hier ein schickes LuaLaTeX-Beispiel. Es zeigt alle Trennstellen im Dokument an. Was passiert ist eigentlich recht einfach. Es wird nach dem Absatzumbruch die Nodeliste durchgegangen, und alle disc-Nodes werden um eine PDF-Anweisung ergänzt, die einen kleinen Strich zeichnet. \documentclass[12pt,a4paper]{scrartcl} \usepackage[ngerman]{babel} \usepackage{blindtext} \usepackage{fontspec} \directlua{ show_hyph = function(head) while [...]]]></description>
			<content:encoded><![CDATA[<p>Weil ich gerade selbst an Silbentrennung arbeite, gibt&#8217;s hier ein schickes LuaLaTeX-Beispiel. Es zeigt alle Trennstellen im Dokument an. Was passiert ist eigentlich recht einfach. Es wird nach dem Absatzumbruch die Nodeliste durchgegangen, und alle <code>disc</code>-Nodes werden um eine PDF-Anweisung ergänzt, die einen kleinen Strich zeichnet.</p>
<pre>\documentclass[12pt,a4paper]{scrartcl}
\usepackage[ngerman]{babel}
\usepackage{blindtext}
\usepackage{fontspec}
\directlua{
show_hyph = function(head)
  while head do
    if head.id == 0 or head.id == 1 then % hlist, vlist
      show_hyph(head.list) % sollte head.head in LuaTeX > 0.65 sein
    elseif head.id == 7 then             % disc
      local n = node.new("whatsit","pdf_literal")
      n.mode = 0
      n.data = "q 0.3 w 0 2 m 0 7 l S Q"
      n.next = head.next
      n.prev = head
      head.next = n
      head = n
    end
  head = head.next
  end
  return true
end
luatexbase.add_to_callback("post_linebreak_filter",show_hyph,"show_hyph")
}

\begin{document}
\blindtext
\end{document}
</pre>
<p>Und hier ein Beispiel, wie das aussehen könnte:</p>
<p><a href="http://www.luatex.de/wp-content/uploads/2011/01/zeige-trennstellen.png"><img class="alignnone size-full wp-image-339" title="zeige-trennstellen" src="http://www.luatex.de/wp-content/uploads/2011/01/zeige-trennstellen.png" alt="Beispiel für die Funktionalität von &quot;Trennstellen zeigen&quot;" width="434" height="285" /></a></p>
<p><i>Inzwischen ist diese Funktionalität als eigenständiges Paket verfügbar. Siehe <a href="http://ctan.org/pkg/showhyphens" title="Showhyphens LaTeX-Paket">die Paketbeschreibung auf CTAN</a>. Einfach benutzen mit <code>\usepackage{showhyphens}</code>.</i></p>
]]></content:encoded>
			<wfw:commentRss>http://www.luatex.de/2011/01/lualatex-zeige-die-trennstellen/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Fontloader + Ligaturen</title>
		<link>http://www.luatex.de/2011/01/fontloader-ligaturen/</link>
		<comments>http://www.luatex.de/2011/01/fontloader-ligaturen/#comments</comments>
		<pubDate>Sun, 09 Jan 2011 13:39:12 +0000</pubDate>
		<dc:creator>Patrick Gundlach</dc:creator>
				<category><![CDATA[Hacker]]></category>

		<guid isPermaLink="false">http://www.luatex.de/?p=330</guid>
		<description><![CDATA[Im letzten April habe ich einen Fontloader vorgestellt, der OpenType, TrueType und Type1 Fonts lädt und für TeX bereitstellt. Nun wurde ich gefragt, wie man den Fontloader um Ligaturen erweitern kann. Hier beschreibe ich die Antwort, den ursprünglichen Artikel erweitere ich entsprechend. Um Ligaturen zu verwenden, musst du erst einmal wissen, für welche Sprache die [...]]]></description>
			<content:encoded><![CDATA[<p>Im letzten April <a title="Fontloader für LuaTeX" href="http://www.luatex.de/2010/04/eigenen-fontloader-erstellen/">habe ich einen Fontloader vorgestellt</a>, der OpenType, TrueType und Type1 Fonts lädt und für TeX bereitstellt. Nun wurde ich gefragt, wie man den Fontloader um Ligaturen erweitern kann. Hier beschreibe ich die Antwort, den ursprünglichen Artikel erweitere ich entsprechend.</p>
<p style="text-align: justify;">Um Ligaturen zu verwenden, musst du erst einmal wissen, für welche Sprache die Schriftart geladen werden soll. So gibt es im Niederländischen die ij-Ligatur und im Türkischen wird die fi-Ligatur vermutlich keine große Verbreitung haben, weil man dann nicht mehr richtig erkennt, ob das i ein i mit Punkt ist oder ohne: ı. Wenn das klar ist, können wir aus der gsub-Tabelle des Fonts alle notwendigen Feature-Namen auswählen. Ein Eintrag in der gsub-Tabelle sieht zum Beispiel so aus:</p>
<pre>subtables = {
  { name = "ls_latn_l_11_s" }
},
type = "gsub_ligature",
flags = {},
name = "ls_latn_l_11",
features = {
  {
    scripts = {
      {
        langs = { "NLD " },
        script = "latn"
      }
    },
    tag = "liga"
  }
}
</pre>
<p>Das bedeutet: wenn das Schriftsystem (script) &#8220;<code>latn</code>&#8221; und die Sprach &#8220;<code>NLD </code>&#8221; gewünscht ist, dann müssen wir alle lookup-Tabellen mit dem Namen &#8220;<code>ls_latn_l_11_s</code>&#8221; betrachten. Der Name steht in der Subtables-Tabelle. In der Fonttabelle gibt es bei den einzelnen Zeichen die <code>lookups</code>-Tabelle. Ein Eintrag beim Zeichen »I_J« sieht zum Beispiel so aus:</p>
<pre>
ls_latn_l_11_s = {
  {
    type = "ligature",
    specification = {
      char = "I_J"
      components = "I J"
    }
  }
</pre>
<p>D.h. wenn wir Niederländisch ausgewählt haben, dann können wir diesen Eintrag in der <code>lookups</code>-Tabelle beachten, da der Name mit dem aus der <code>gsub</code>-Tabelle übereinstimmt. Mit dieser Information können wir dann die notwendige <code>ligatures</code>-Tabelle für TeX erstellen:</p>
<pre>
ligatures = {
  [74] = {
    char = 306,
    type = 0
  }
}
</pre>
<p>Dieser Eintrag gehört dann zum Zeichen »I« (großes i). Damit wird TeX, wenn es auf die Folge IJ stößt, diese Zeichen durch die IJ-Ligatur ersetzen (Ĳ).</p>
<p>Im Code sieht das dann so aus:</p>
<pre>
-- Hier stehen die Schreibsysteme (scripts) und Sprachen, für die die Ligaturen gesucht werden sollen.
local scripts_OK = { DFLT = true, latn = true }
local langs_OK   = { dflt = true }
local lookups = {}

if fontinfo.gsub then
  for i=1,#fontinfo.gsub do
    local gsub = fontinfo.gsub[i]
    for j=1,#gsub.features do
      local features = gsub.features[j]
      if features.tag =="liga" then
        for k=1,#features.scripts do
          local script_tbl = features.scripts[k]
          if scripts_OK[script_tbl.script] then
            -- die richtigen "scripts" haben wir gefunden, jetzt kommt es noch
            -- auf die richtige Sprache an.
            for l=1,#script_tbl.langs do
              local lang = script_tbl.langs[l]
              if langs_OK[lang] then
                lookups[gsub.subtables[1].name] = true
              end
            end
          end
        end
      end
    end
  end
end
</pre>
<p>Die ersten beiden Tabellen beschreiben die gewünschte Sprache bzw. das Schreibsystem. Wichtig: die Bezeichner sind immer vier Zeichen lang, bei Niederländisch etwa wird mit Leerzeichen aufgefüllt: »NDL «. Dann müssen wir uns relativ weit nach unten »hangeln« um herauszufinden, ob es a) ein Ligatureintrag ist (<code>feature="liga"</code>), ob das script übereinstimmt und ob die Sprache übereinstimmt. Erst dann können wir uns den Namen aus der <code>subtable</code> merken. Nach Ende der Schleife kennen wir alle Namen für die <code>lookup</code>-Tabelle.</p>
<p>Der  zweite Teil besteht darin, für jedes Zeichen die <code>lookup</code>-Tabelle durchzugehen, ob dort Einträge sind, die uns interessieren:</p>
<pre>
if glyph.lookups then
  for k,v in pairs(glyph.lookups) do
    if lookups[k] then
      for i,w in ipairs(v) do
        ligatures[#ligatures + 1] = w
      end
    end
  end
end
</pre>
<p>Die Einträge können wir nicht direkt verarbeiten, weil die beteiligten Zeichen möglicherweise noch gar nicht verarbeitet wurden (= noch nicht im <code>f.characters</code>-Arra</code>y enthalten sind - siehe den vollständigen Code). Daher speichern wir die Ligatur-Einträge und wenn alle Zeichen verarbeitet wurden, werden die Ligaturen »angewendet«.</p>
<pre>
for _,v in ipairs(ligatures) do
  local spec = v.specification
  local result_cp = lookup_codepoint_by_name[spec.char]

  if result_cp > 0 then    -- -1 == unencoded
    local components = string.explode(spec.components) -- z.B. "ff i"

    if #components == 2 then -- wir behandeln nur Ligaturen mit 2 Komponenten
      local char = f.characters[lookup_codepoint_by_name[components[1]]]
      char.ligatures = char.ligatures or {}
      char.ligatures[lookup_codepoint_by_name[components[2]]] = { char = result_cp  }
    end
  end
end
</pre>
<p>Dies erzeugt die <code>ligatures</code> Einträge für die Zeichen, die als erstes in der Ligatur vorkommen. Bei der IJ-Ligatur also beim I. Den vollständigen Code findest du wie erwähnt im a title="Fontloader für LuaTeX" href="http://www.luatex.de/2010/04/eigenen-fontloader-erstellen/">ursprünglichen Artikel</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.luatex.de/2011/01/fontloader-ligaturen/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

