Changes

Jump to navigation Jump to search
3,317 bytes added ,  19:10, 4 October 2018
move \product and \project below \start...
< [[The ConTeXt Way]], | [[Structurals]]>
==Introduction== ConTeXt knows no document classes (as LaTeX does). You can define your [[Layout|layout ]] yourself. If you use the same layout for several projectsproducts, save it as an '''environment''' file.
How to split up a large project, say a book, in several handy parts? – Use ConTeXt's project management facilities.
* a '''project''' contains links one ore or more '''products'''to their environment
* a '''product''' contains several '''component'''s
* an '''environment''' defines the common layout (etc.) of a project
The environment could also contain different versions ([[Modes|different versions]]) of the layout, e.g. print and screen (like Pragma's manuals) or final and correction etc.
Example 1: Magazine
* project: magazine
* product: one volume of the magazine
* component: an a single article
Example 2: Book
* project: booka series of books* product: part of the one book* component: part or chapter
[[Image:projectProject-structure.png]]
If you tex (compile) one single component (e.g. a chapter of a book) or product (e.g. one volume of a magazine), the settings environment file of the project is used. In addition, you have to keep in mind that when compiling a product or component file, ConTeXt goes "up" to the project file and compiles everything it finds in there that is not a {{cmd|product}} (e.g. table of content, sectioning commands, text, {{cmd|component}} etc.). So all the things on projectlevel have to be put inside a {{cmd|product}}, otherwise they will show up in the individual components (or products), too. That also makes it problematic to use {{cmd|component}} directly inside a project file, i.e. you '''have's environment are used'' to use {{cmd|product}}, you can't skip it. While you can compile ("tex") products and single components, the project is not intended for compiling; trying might lead to infinite inclusion loops and the error message "TeX capacity exceeded"==File and directory setup== ===Naming conventions=== [[User:Hraban|Hraban]] uses and suggests the following naming conventions
* project_foo
* prd_foo
* c_foo
* env_foo
 
There's a Python script <tt>contextproject.py</tt> at Hraban's [http://github.com/fiee/tools/blob/master/contextproject.py github repository] to help creating the files (.ini files can be used for initial content). This functionality would be nice to be integrated in any editor supporting ConTeXt...
 
===Example files===
'''Project'''
<pretexcode>
\startproject project_mymag
\environment env_mymag % only mentioned here!
\product prd_year2004-03
\product prd_year2004-04
 
\completetableofcontents
\stopproject
</pretexcode>
'''Environment'''
<pretexcode>
\startenvironment env_mymag
\stopenvironment
</pretexcode>
'''Product'''
<pretexcode>
\startproduct prd_year2004-01
\project project_mymag
\stopproduct
</pretexcode>
'''Component'''
<pretexcode>
\startcomponent c_editorial
\product prd_year2004-01 % but you can use it in other products anyway
\project project_mymag
\title{Editorial}
\stopcomponent
</pretexcode===Subdirectories=== If you keep all files in one directory, it tends to get confusing. Here’s a structured example where we keep all parts of one product together:  env_mymag.tex project_mymag.tex 2011-01/prd_issue2011-01.tex 2011-02/prd_issue2011-02.tex 2011-03/prd_issue2011-03.tex ... 2011-03/c_editorial.tex 2011-03/c_article1.tex ... 2011-03/img/author1.jpg ... general_img/logo.pdf ... '''Environment'''<texcode>\startenvironment env_mymag\project project_mymag ... % where \product and \component look for TeX input files\usepath[{2011-01,2011-02,2011-03}] % where to look for images\doifmodeelse{*product} {\setupexternalfigures[directory={../general_img}]} {\setupexternalfigures[directory={../general_img, img}]} ...\stopenvironment</texcode> '''Product'''<texcode>\startproduct prd_issue2011-01\project project_mymag\environment env_mymag \component c_editorial\component c_article1... \stopproduct</texcode> ConTeXt automatically looks into parent directories. ==Command behaviour== Within a <code>\start...\stop...</code> environment, project, product, and environment definition files are loaded only once, while component files are loaded at every mention. In addition, certain loading commands are ignored inside certain environments -- for example, it makes no sense to load a <code>\component</code> inside a <code>\startenvironment</code> block. The table below gives an overview. {|| || {{cmd|project}} || {{cmd|environment}} || {{cmd|product}} || {{cmd|component}} |-| {{cmd|starttext}} || &mdash; || once || &mdash; || at every mention |-| {{cmd|startproject}} || &mdash; || once || once || &mdash; |-| {{cmd|startenvironment}} || &mdash; || once || &mdash; || &mdash; |-| {{cmd|startproduct}} || once || once || &mdash; || at every mention |-| {{cmd|startcomponent}} || once || once || &mdash; || at every mention |} ==See also==
There's a Perl script <tt>makeproject.pl</tt> at Hraban's site Hans Hagen (2011) [http://wwwpragma-ade.ramm.chcom/fieegeneral/texniquemagazines/?menu=0mag-1-3&lang=en ''fiëé teXnique''1101.pdf Project Structure] to help creating the files (.ini files can be used for initial content), ConTeXt magazine #1101.

Navigation menu