Changes

Jump to navigation Jump to search
4,194 bytes added ,  02:08, 6 August 2007
Created the page; introducing Mark IV.
 

<center><font color='#663366' size='+3'><strong> Happy birthday M.! </strong></font></center>
&nbsp;

<div class='floatright'>[http://live.contextgarden.net/.hahaha/MKIV.avi <context>\starttext\externalfigure[/opt/local/texmf/tex/context/sample/.hahaha/MKIV.png]\stoptext</context>]
<font size='+1'><strong>''Accelerate to Mark IV!''</strong></font>
</div>
Today is the birth date of Mark IV, the coming of which we have been longing for since many years.

Life! Health! Prosperity!

== Introducing Mark IV ==

Mark IV is the name of the [[LuaTeX]]-aware part of ConTeXt; that is, when you use ConTeXt over the LuaTeX engine instead of PDFTeX or XeTeX. You run it with <code>texexec --lua</code>.

The first public beta has been released on the 6th of August, 2007 and is readily available on [http://live.contextgarden.net/ ConTeXt Live]. It takes advantage of the amazing capabilities of LuaTeX and opens up a whole new world of possibilities, in particular with fonts.

== Sample code ==

Here are some examples of cool stuff you can do with Mark IV ([http://live.contextgarden.net/ test it!]).

=== Lua core ===

The first thing you will want to test are the lua functions. Try

<texcode>
\ctxlua{a = 1.5 ; b = 1.8 ; c = a*b ; tex.print(c) ;}
</texcode>

or the equivalent:

<texcode>
\startlua
a = 1.5
b = 1.8
c = a*b
tex.print(c)
\stoplua
</texcode>

You can also do more elaborate calculations with the lua <code>math</code> library:

<texcode>
\ctxlua{tex.print("$\string\\sqrt{2} = " .. math.sqrt(2) .. "$")}
</texcode>

Note that the above works with any flavour of LuaTeX; nothing is actually ConTeXt-specific (except for <cmd>ctxlua</cmd> and <cmd>startlua</cmd>/<cmd>stoplua</cmd>).

=== Fonts and typescripts ===

==== Good ol' typescripts ====

Of course, Mark IV allows you typescripts as you've always done; for example:

<texcode>
\usetypescript[palatino][texnansi]
\setupbodyfont[palatino,12pt]
effe fietsen 2: \input tufte $\sqrt{2}$ \eogonek

\sc effe fietsen 2: \input tufte $\sqrt{2}$ \eogonek
</texcode>

That's as simple as using a traditional ConTeXt typescript!

But ... how is it any different, then? Well, the difference is that in Mark IV, we can use an Opentype font directly, so that what is done here: when we want to use Palatino, the [[TeX Gyre]] equivalent (“Pagella”) is called and we can use its Opentype “features”; read on.

==== Opentype features ====

A “feature”, in the Opentype jargon, is a set of rules describing changes in the appearance of the text. Hmm, that's not very precise. Let's show some examples. First of all, you have to know that features are referred to with 4-letteres tag. One of them is ‘smcp‘, for “small caps“. Let's consider the following Mark IV-only code:

<texcode>
\definefontfeature[smallcaps][language=DFLT,script=latn,smcp=yes]
\font\palasmallcaps=texgyrepagella-regular*smallcaps
\palasmallcaps This is a text in small capitals.
</texcode>

Here you basically define a (Mark IV) feature with the name ”smallcaps”, and associate it with the (Opentype) feature “smcp”. You have to specify with script you want to use it; scripts in Opentype are also tagged with four letters, and “latn” is of course Latin.

Then you define a TeX font with that feature.

You can see what features are defined in a particular font with the following bit of code

<texcode>
\ctxlua
{
fontname = 'texgyrepagella-regular.otf'

tfmdata = fonts.tfm.read_and_define("file:" .. fontname, 655360)
font = tfmdata.shared.otfdata
if font
then
gsubfeatures = fonts.otf.analyze_features(font.gsub)
gposfeatures = fonts.otf.analyze_features(font.gpos)
end

if gsubfeatures then
table.sort(gsubfeatures)
tex.sprint("\\rm GSUB features: \\tt ")
for _, feat in ipairs(gsubfeatures)
do tex.sprint(feat) tex.sprint(' ')
end
else tex.sprint("\\rm No GSUB features")
end
tex.sprint("\\par")

if gposfeatures then
tex.sprint("\\rm GPOS features: \\tt ")
table.sort(gposfeatures)
for _, feat in ipairs(gposfeatures)
do tex.sprint(feat) tex.sprint(' ')
end
else tex.sprint("\\rm No GPOS features")
end
}
</texcode>

It prints the list on the page.
45

edits

Navigation menu