Difference between revisions of "Modules"

From Wiki
Jump to navigation Jump to search
(→‎Modules writing guidelines: revised a bit; needs expanding)
Line 181: Line 181:
 
==Modules writing guidelines==
 
==Modules writing guidelines==
  
Prior to release 2005.05.25, ConTeXt silently truncated all file names in <cmd>usemodule</cmd> commands to 8 characters long and lowercased them to "prevent cross platform problems with filenames". Thus, module files that are to be used with older versions of ConTeXt must have filenames that fit those restrictions, or they will (somewhat cryptically) not be found.
+
===Module requirements===
 +
All modules should start with a block containing ''meta information'' about that module.
 +
There is a [[module template]] available to help setting up that header correctly.
  
All modules should start with a block containing meta information about that module. There is a
+
Do not forget to specify a ''license'' as the permitted modes of distribution
[[module template]] available to help setting that up correctly.
+
depend on which one you choose.
 +
The [http://wiki.contextgarden.net/Read_Me#The_Code ConTeXt sources] are licensed
 +
either under GPLv2 or the LPPL, so you might want to stick to these or a more permissive
 +
license.
 +
(Choose one: [http://www.opensource.org/].)
 +
Including the full text of your license in your source repo is best practice.
  
<b>TODO</b>
+
In order to avoid ''conflicting macros'' it is essential for a module that it adhere
 +
to the [[Module_Namespaces|namespace convention]].
 +
After releasing a module its namespace[s] should be registered in the [[Module_Namespaces#List_of_Module_Namespaces|list]] for other module authors to know.
  
Each module should have an associated specification file (as in [http://source.contextgarden.net/tex/context/interface/cont-en.xml /tex/context/interface/cont-en.xml]). Probably one day this will become a part of [http://texshow.contextgarden.net/ texshow] and will also be easy-to-edit.
+
===XML Interface file===
 +
Each module should have an associated XML specification file
 +
(as in [http://source.contextgarden.net/tex/context/interface/cont-en.xml /tex/context/interface/cont-en.xml]).
 +
Its purpose is a comprehensive listing of the optional and non-optional
 +
arguments that a macro defined in the module accepts.
 +
From the interface a good deal of documentation can be auto-generated,
 +
as are for instance the [http://pragma-ade.com/general/qrcs/setup-en.pdf ConTeXt Quick Reference]
 +
and the initial input of the [http://wiki.contextgarden.net/Category:Reference/en Command Reference],
 +
which itself started as a wikification of the now obsolete ''TeXShow''.
  
 
When documenting your module, you can use
 
When documenting your module, you can use
Line 204: Line 221:
 
</context>
 
</context>
  
By default, this places a frame around the setup. If you want to get gray backgroud, as in context documentation, add the following
+
By default, this places a frame around the setup. If you want to get gray background, as in the context documentation, add the following
  
 
<texcode>
 
<texcode>
Line 212: Line 229:
 
       frame=off]
 
       frame=off]
 
</texcode>
 
</texcode>
 +
 +
Apart from the existing XML files in the ConTeXt tree there is little
 +
documentation online, so feel free to relay your questions to
 +
the [[ConTeXt_Mailing_Lists|mailing list]].
 +
 +
===Legacy modules disclaimer===
 +
<!-- This info is obsolete, the section could be kicked out, doesn’t it? -->
 +
Prior to release ''2005.05.25'', ConTeXt silently truncated all file names in <cmd>usemodule</cmd> commands to 8 characters long and lowercased them to "prevent cross platform problems with filenames".  Thus, module files that are to be used with older versions of ConTeXt must have filenames that fit those restrictions, or they will (somewhat cryptically) not be found.

Revision as of 15:10, 16 January 2011

< The ConTeXt Way

Modules are extensions to ConTeXt's core functions.

There are not as many modules for ConTeXt as packages for LaTeX, because a lot of LaTeX package features are in ConTeXt's core.

Installation

Basics

The installation of extra files in TeX (called modules in ConTeXt) can be difficult for people who are new to TeX or are not themselves interested in TeX programming.

According to the TDS (TeX directory structure) and the ConTeXt developers, user-written files reside under the path

 $TEXMF/tex/context/third/<modulename>/<files>

In the private TeX directory ($TEXMF), directories can have the names

  • texmf-local
  • texmf-extra
  • texmf-project

but their existence depends on the TeX distribution; among these, texmf-local is the most common.

Installation by hand

When you want to install a new module which is available as file only create the subdirectories in the way described above and place the file there, for modules which are available as zip files with precreated subdorectories you can unzip the archive in the top-level directory (e.g. texmf-local/) and all files are on the correct place.

After the files are placed at the right place you have to update TeX's database to let it know where it can find the files, this is done for MkII with

 mktexlsr (command name depends on the TeX distribution)

and for MkIV with

 context --generate

ConTeXt minimals

Users of the ConTeXt minimals dont't have to download the module files and unzip them in the local directory because they can use the 'first-setup' for this.

To install for example the simpleslides modules you write

 first-setup.sh --extras="t-simpleslides"

To install more modules at the same time write

 first-setup.sh --extras="t-simpleslides,t-french"

The complete list of availables modules in minimals is:

  • t-urwgaramond
  • t-account
  • t-algorithmic
  • t-bnf
  • t-chromato
  • t-cmscbf
  • t-cmttbf
  • t-construction-plan
  • t-degrade
  • t-fixme
  • t-french
  • t-fullpage
  • t-games
  • t-gnuplot
  • t-layout
  • t-letter
  • t-lettrine
  • t-lilypond
  • t-mathsets
  • t-pgfplots
  • t-pgfplotstable
  • t-ruby
  • t-simplefonts
  • t-simpleslides
  • t-typearea
  • t-urwgaramond
  • t-vim
  • type-urwgothic
  • type-urwgaramond

TeX Live


NOTE: description required

The following modules are available:

  • context-account
  • context-bnf
  • context-chromato
  • context-construction-plan
  • context-degrade
  • context-french
  • context-games
  • context-gnuplot
  • context-letter
  • context-lettrine
  • context-lilypond
  • context-mathsets
  • context-simpleslides
  • context-taspresent
  • context-typearea
  • context-vim

Usage

When you load a module with \usemodule[modulename] ConTeXt looks for a file with the following names:

  • m-modulaname (core module)
  • p-modulename (private module)
  • s-modulename (ConTeXt style file)
  • x-modulename (XML module)
  • t-modulename (Third party module)
  • modulename

Once a file is found ConTeXt stops the search and loads the found file (only once).

When you have two file with the same name but different prefixes you can tell ConTeXt which file it should load with

\usemodule[<prefix>][modulename]

Included modules:

Contributed modules:

For a list of contributed modules see tlcontrib and/or the modules section on contextgarden.net.


TODO: list more modules or none of them (See: To-Do List)


  • xdesc (extended description, e.g. for epigrams)
  • nath (natural math, see Math)
  • amsl (AMSmath, see Math)
  • Gnuplot: support for direct inclusion of Gnuplot graphs out of the source (the module has been removed from the main distribution and will be included into third party modules again when ready)
  • Gantt charts (drawing Gantt charts)

File names of included modules start with "m-", but third party (contributed) modules should start with "t-".

In order to install a contributed module, copy its directory into $TEXMF/tex/context/third then run luatools --generate.

Special Purpose Modules

The following modules implement special formatting requirement for journals or magazines. These modules are distributed with ConTeXt, so you need not download anything.

Modules writing guidelines

Module requirements

All modules should start with a block containing meta information about that module. There is a module template available to help setting up that header correctly.

Do not forget to specify a license as the permitted modes of distribution depend on which one you choose. The ConTeXt sources are licensed either under GPLv2 or the LPPL, so you might want to stick to these or a more permissive license. (Choose one: [1].) Including the full text of your license in your source repo is best practice.

In order to avoid conflicting macros it is essential for a module that it adhere to the namespace convention. After releasing a module its namespace[s] should be registered in the list for other module authors to know.

XML Interface file

Each module should have an associated XML specification file (as in /tex/context/interface/cont-en.xml). Its purpose is a comprehensive listing of the optional and non-optional arguments that a macro defined in the module accepts. From the interface a good deal of documentation can be auto-generated, as are for instance the ConTeXt Quick Reference and the initial input of the Command Reference, which itself started as a wikification of the now obsolete TeXShow.

When documenting your module, you can use

\usemodule[int-load] %Allow xml parsing 
\loadsetups[m-name-of-your-module.xml] % to load the file with definitions
\setup{nameofyourcommand}

An example:

\usemodule[int-load]
\loadsetups
\setup{externalfigure}

By default, this places a frame around the setup. If you want to get gray background, as in the context documentation, add the following

 \setupframedtexts
     [setuptext]
     [background=screen,
      frame=off]

Apart from the existing XML files in the ConTeXt tree there is little documentation online, so feel free to relay your questions to the mailing list.

Legacy modules disclaimer

Prior to release 2005.05.25, ConTeXt silently truncated all file names in \usemodule commands to 8 characters long and lowercased them to "prevent cross platform problems with filenames". Thus, module files that are to be used with older versions of ConTeXt must have filenames that fit those restrictions, or they will (somewhat cryptically) not be found.