Imported Upstream version 2.9.1+ds
[debian/jabref.git] / src / help / CustomExports.html
1 <html xmlns="">\r
2 <head>\r
3 <link rel="stylesheet" type="text/css" href="jabref_help.css"/>\r
4 </head>\r
5 \r
6 <body>\r
7 \r
8     <h1>Custom export filters</h1>\r
9 \r
10     <p>JabRef allows you to define and\r
11     use your own export filters, in the same way as the standard\r
12     export filters are defined. An export filter is defined by one\r
13     or more <i>layout files</i>, which with the help of a\r
14     collection of built-in formatter routines specify the format of\r
15     the exported files. Your layout files must be prepared in a\r
16     text editor outside of JabRef.</p>\r
17 \r
18     <h2>Adding a custom export filter</h2>\r
19 \r
20     <p>The only requirement for\r
21     a valid export filter is the existence of a file with the\r
22     extension <b>.layout</b>. To add a new custom export filter,\r
23     open the dialog box <b>Options -&gt; Manage custom exports</b>,\r
24     and click <b>Add new</b>. A new dialog box will appear,\r
25     allowing you to specify a name for the export filter (which\r
26     will appear as one of the choices in the File type dropdown\r
27     menu of the file dialog when you use the <b>File -&gt;\r
28     Export</b> menu choice in the JabRef window), the path to the\r
29     <b>.layout</b> file, and the preferred file extension for the\r
30     export filter (which will be the suggested extension in the\r
31     file dialog when you use the export filter).</p>\r
32 \r
33     <h2>Creating the export filter</h2>\r
34 \r
35     <p>To see examples of how export filters are made, look for\r
36     the package containing the layout files for the standard\r
37     export filters on our download page.</p>\r
38 \r
39     <h3>Layout files</h3>\r
40 \r
41     <p>Let us assume that we are creating an HTML export filter. \r
42      While the export filter only needs to consist of a single\r
43     <b>.layout</b> file, which in this case could be called\r
44     <i>html.layout</i>, you may also want to add two files called\r
45     <i>html.begin.layout</i> and <i>html.end.layout</i>. The former\r
46     contains the header part of the output, and the latter the\r
47     footer part. JabRef will look for these two files whenever the\r
48     export filter is used, and if found, either of these will be\r
49     copied verbatim to the output before or after the individual\r
50     entries are written.</p>\r
51 \r
52     <p>Note that these files must reside in the same directory as\r
53     <i>html.layout</i>, and must be named by inserting\r
54     <b>.begin</b> and <b>.end</b>, respectively.\r
55     In our example export filter, these could look like the\r
56     following:</p>\r
57 \r
58     <p><i>html.begin.layout</i>:<br />\r
59     <code>&lt;!DOCTYPE html&gt;<br/>&lt;html&gt;<br /> &lt;body style="color:#275856; font-family: Arial, sans-serif;"&gt;</code>\r
60     </p>\r
61 \r
62     <p><i>html.end.layout</i>:<br />\r
63     <code>&lt;/body&gt;<br />&lt;/html&gt;</code></p>\r
64 \r
65     <p>The file <i>html.layout</i> provides the <i>default</i>\r
66     template for exporting one single entry. If you want to use\r
67     different templates for different entry types, you can do this\r
68     by adding entry-specific <b>.layout</b> files. These must also\r
69     reside in the same directory as the main layout file, and are\r
70     named by inserting <b>.entrytype</b> into the name of the main\r
71     layout file. The entry type name must be in all lowercase. In\r
72     our example, we might want to add a template for book entries,\r
73     and this would go into the file <i></i>. For a\r
74     PhD thesis we would add the file <i>html.phdthesis.layout</i>,\r
75     and so on. These files are similar to the default layout file,\r
76     except that they will only be used for entries of the matching\r
77     type. Note that the default file can easily be made general\r
78     enough to cover most entry types in most export filters.</p>\r
79 \r
80     <h3>The layout file format</h3>\r
81 \r
82     <p>Layout files are created using a\r
83     simple markup format where commands are identified by a\r
84     preceding backslash. All text not identified as part of a\r
85     command will be copied verbatim to the output file.</p>\r
86 \r
87     <h3>Field commands</h3>\r
88 \r
89     <p>An arbitrary word preceded by a backslash, e.g.\r
90     <code>\author</code>, <code>\editor</code>, <code>\title</code>\r
91     or <code>\year</code>, will be interpreted as a reference to\r
92     the corresponding field, which will be copied directly to the\r
93     output.</p>\r
94 \r
95     <h3>Field formatters</h3>\r
96 \r
97     <p>Often there will be a need for some preprocessing of the\r
98     field contents before output. This is done using a <i>field\r
99     formatter</i> - a java class containing a single method that\r
100     manipulates the contents of a field.</p>\r
101 \r
102     <p>A formatter is used by inserting the <code>\format</code>\r
103     command followed by the formatter name in square braces, and\r
104     the field command in curly braces, e.g.:</p>\r
105 \r
106     <p><code>\format[ToLowerCase]{\author}</code></p>\r
107 \r
108     <p>You can also specify multiple formatters separated by\r
109     commas. These will be called sequentially, from left to right,\r
110     e.g.</p>\r
111 \r
112     <p><code>\format[ToLowerCase,HTMLChars]{\author}</code></p>\r
113 \r
114     <p>will cause the formatter <b>ToLowerCase</b> to be called\r
115     first, and then <b>HTMLChars</b> will be called to format the\r
116     result. You can list an arbitrary number of formatters in this\r
117     way.</p>\r
118 \r
119     <p>The argument to the formatters, withing the curly braces,\r
120     does not have to be a field command. Instead, you can insert\r
121     normal text, which will then be passed to the formatters\r
122     instead of the contents of any field. This can be useful for\r
123     some fomatters, e.g. the CurrentDate formatter (described\r
124     below).</p>\r
125 \r
126     <p>Some formatters take an extra argument, given in parentheses\r
127     immediately after the formatter name. The argument can be enclosed\r
128     in quotes, which is necessary if it includes the parenthesis characters.\r
129     For instance, <code>\format[Replace("\s,_")]{\journal}</code> calls\r
130     the <b>Replace</b> formatter with the argument <b>\s,_</b> (which results\r
131     in the "journal" field after replacing all whitespace by underscores).\r
132     </p>\r
133 \r
134     <p>See below for a list of built-in export formatters.</p>\r
135 \r
136     <h3>Conditional output</h3>\r
137 \r
138     <p>Some static output might only make\r
139     sense if a specific field is set. For instance, say we want to\r
140     follow the editor names with the text <code>(Ed.)</code>. This\r
141     can be done with the following text:</p>\r
142 \r
143     <p><code>\format[HTMLChars,AuthorFirstFirst]{\editor}\r
144     (Ed.)</code></p>\r
145 \r
146     <p>However, if the <code>editor</code> field has not been set -\r
147     it might not even make sense for the entry being exported - the\r
148     <code>(Ed.)</code> would be left hanging. This can be prevented\r
149     by instead using the <code>\begin</code> and <code>\end</code>\r
150     commands:</p>\r
151 \r
152     <p><code>\begin{editor}<br />\r
153     \format[HTMLChars,AuthorFirstFirst]{\editor} (Ed.)<br />\r
154      \end{editor}</code></p>\r
155 \r
156     <p>The <code>\begin</code> and <code>\end</code> commands make\r
157     sure the text in between is printed if and only if the field\r
158     referred in the curly braces is defined for the entry being\r
159     exported.</p>\r
160 \r
161     <p>A conditional block can also be dependent on more than one field, and the content is only printed when simple boolean conditions are satisfied. Two boolean operator are provided:</p>\r
162     <ul>\r
163         <li>AND operator : <code>&amp;</code>, <code>&amp;&amp;</code></li>\r
164         <li>OR operator : <code>|</code>, <code>||</code></li>\r
165     </ul>\r
166     <p>To output text only if both <code>year</code> and <code>month</code> are set, use a block like the following:<br/><br/> <code>\begin{year&amp;&amp;month}Month: \format[HTMLChars]{\month}\end{year&amp;&amp;month}</code><br/><br/>which will print "Month: " plus the contents of the <code>month</code> field, but only if also the <code>year</code> field is defined.</p>\r
167 \r
168     <p><b>Note:</b> Use of the <code>\begin</code> and\r
169     <code>\end</code> commands is a key to creating layout files\r
170     that work well with a variety of entry types.</p>\r
171 \r
172     <h3>Grouped output</h3>\r
173 \r
174     <p>If you wish to separate your entries\r
175     into groups based on a certain field, use the grouped output\r
176     commands. Grouped output is very similar to conditional output,\r
177     except that the text in between is printed only if the field\r
178     referred in the curly braces has changed value.</p>\r
179 \r
180     <p>For example, let's assume I wish to group by keyword. Before\r
181     exporting the file, make sure you have sorted your entries\r
182     based on keyword. Now use the following commands to group by\r
183     keyword:</p>\r
184 \r
185     <p><code>\begingroup{keywords}New Category:\r
186     \format[HTMLChars]{\keywords}<br />\r
187      \endgroup{keywords}</code></p>\r
188 \r
189     <h2>Sharing your work</h2>\r
190 \r
191     <p>With external layout files, it's\r
192     fairly simple to share custom export formats between users. If\r
193     you write an export filter for a format not supported by\r
194     JabRef, or an improvement over an existing one, we encourage\r
195     you to post your work on our page. The same\r
196     goes for formatter classes that you write. We'd be happy to\r
197     distribute a collection of submitted layout files, or to add to\r
198     the selection of standard export filters and formatters.</p>\r
199 \r
200     <p>Starting with JabRef 2.4 you can also package your \r
201         ExportFormat or LayoutFormatter as a plug-in. If you do so,\r
202         you can provide a single zip-file to other user to make use\r
203         of your ExportFormat. For an example download the JabRef\r
204         source release and have a look at the directory\r
205         <code>src/plugins/</code>. Don't hesitate to stop by the\r
206         forums on Sourceforge, since we don't have extensive documentation, yet.</p>\r
207 \r
208 \r
209     <h2>Built-in export formatters</h2>\r
210 \r
211     <p>JabRef provides the following set of formatters:</p>\r
212 \r
213     <ul>\r
214         <li><code>Authors</code> : this formatter provides formatting options for the author and editor fields; for detailed information, see below. It deprecates a range of dedicated formatters provided in versions of JabRef prior to 2.7.</li>\r
215 \r
216                 <li><code>CreateBibORDFAuthors</code> : formats authors for according to the requirements of the Bibliographic Ontology (bibo).</li>\r
217 \r
218         <li><code>CreateDocBookAuthors</code> : formats the author\r
219         field in DocBook style.</li>\r
220 \r
221         <li><code>CreateDocBookEditors</code> : formats the editor field in DocBook style. </li>\r
222 \r
223         <li><code>CurrentDate</code> : outputs the current date.\r
224         With no argument, this formatter outputs the current date\r
225         and time in the format "yyyy.MM.dd hh:mm:ss z" (date, time\r
226         and time zone). By giving a different format string as\r
227         argument, the date format can be customized. E.g.\r
228         <code>\format[CurrentDate]{yyyy.MM.dd}</code> will give the\r
229         date only, e.g. 2005.11.30.</li>\r
230 \r
231         <li><code>Default</code> : takes a single argument, which serves as a default value.\r
232         If the string to format is non-empty, it is output without changes. If it is empty,\r
233         the default value is output. For instance, <code>\format[Default(unknown)]{\year}</code>\r
234         will output the entry's year if set, and "unknown" if no year is set.</li>\r
235         \r
236         <li><code>DOIStrip</code> : strips any prefixes from the DOI string.</li>\r
237         <li><code>DOICheck</code> : provides the full url for a DOI link.</li>\r
238 \r
239         <li><code>FileLink(filetype)</code> : if no argument is given, this formatter outputs\r
240         the first external file link encoded in the field. To work, the formatter must\r
241         be supplied with the contents of the "file" field.\r
242         <p>This formatter takes the name of an external file type as an optional argument,\r
243         specified in parentheses after the formatter name. For instance,\r
244         <code>\format[FileLink(pdf)]{\file}</code> specifies <code>pdf</code> as an\r
245         argument. When an argument is given, the formatter selects the first file\r
246         link of the specified type. In the example, the path to the first PDF link will\r
247         be output.</p></li>\r
248 \r
249         <li><code>FirstPage</code> : returns the first page from the "pages" field, if set.\r
250             For instance, if the pages field is set to "345-360" or "345--360",\r
251             this formatter will return "345".</li>\r
252             \r
253         <li><code>FormatChars</code> : This formatter converts LaTeX character sequences \r
254         their equicalent unicode characters and removes other LaTeX commands without\r
255         handling them.</li>\r
256 \r
257         <li><code>FormatPagesForHTML</code> : replaces "--" with "-".</li>\r
258 \r
259         <li><code>FormatPagesForXML</code> : replaces "--" with an XML en-dash.</li>\r
260 \r
261         <li><code>GetOpenOfficeType</code> : returns the number used by the\r
262         bibliography system (versions 1.x and 2.x) to denote the type of this entry.</li>\r
263 \r
264         <li><code>HTMLChars</code> : replaces TeX-specific special\r
265         characters (e.g. {\^a} or {\"{o}}) with their HTML\r
266         representations, and translates LaTeX commands \emph, \textit,\r
267         \textbf into HTML equivalents.</li>\r
268 \r
269         <li><code>HTMLParagraphs</code> : interprets two\r
270         consecutive newlines (e.g. \n \n) as the beginning of a new\r
271         paragraph and creates paragraph-html-tags accordingly.</li>\r
272 \r
273         <li><code>IfPlural</code> : outputs its first argument if the input field looks\r
274         like an author list with two or more names, or its second argument otherwise.\r
275         E.g. <code>\format[IfPlural(Eds.,Ed.)]{\editor}</code> will output "Eds." if there\r
276         is more than one editor, and "Ed." if there is only one.</li>\r
277         \r
278         <li><code>JournalAbbreviator</code> : The given input text is abbreviated according to the journal abbreviation lists.\r
279                 If no abbreviation for input is found (e.g. not in list or already abbreviated), the input will be returned unmodified.\r
280                 For instance, when using <code>\format[JournalAbbreviator]{\journal}</code>, \r
281                 "Physical Review Letters" gets "Phys. Rev. Lett." </li>\r
282 \r
283         <li><code>LastPage</code> : returns the last page from the "pages" field, if set.\r
284             For instance, if the pages field is set to "345-360" or "345--360",\r
285             this formatter will return "360".</li>\r
286             \r
287         <li><code>NoSpaceBetweenAbbreviations</code> :  LayoutFormatter that removes\r
288         the space between abbreviated First names. Example: J. R. R. Tolkien becomes J.R.R. Tolkien.</li>\r
289         \r
290         <li><code>NotFoundFormatter</code> : Formatter used to signal that a formatter hasn't been found.\r
291         This can be used for graceful degradation if a layout uses an undefined format.</li>\r
292  \r
293         <li><code>Number</code> : outputs the 1-based sequence number of the current entry in the\r
294         current export. This formatter can be used to make a numbered list of entries. The\r
295         sequence number depends on the current entry's place in the current sort order, not on\r
296         the number of calls to this formatter.</li>\r
297 \r
298         <li><code>RemoveBrackets</code> : removes all curly brackets "{" or "}".</li>\r
299 \r
300         <li><code>RemoveBracketsAddComma</code> : removes all curly brackets "{" or "}". The closing curly bracket\r
301         is replaced by a comma.</li>\r
302 \r
303         <li><code>RemoveLatexCommands</code> : removes LaTeX\r
304         commands like <code>\em</code>, <code>\textbf</code>, etc.\r
305         If used together with <code>HTMLChars</code> or\r
306         <code>XMLChars</code>, this formatter should be called\r
307         last.</li>\r
308 \r
309         <li><code>RemoveTilde</code> : replaces the tilde character\r
310         used in LaTeX as a non-breakable space by a regular space.\r
311         Useful in combination with the <a href="#NameFormatter">NameFormatter</a> discussed in\r
312         the next section.</li>\r
313 \r
314         <li><code>RemoveWhitespace</code> : removes all whitespace characters.</li>\r
315 \r
316         <li><code>Replace(regexp,replacewith)</code> : does a regular expression replacement.\r
317         To use this formatter, a two-part argument must be given. The parts are\r
318         separated by a comma. To indicate the comma character, use an escape\r
319         sequence: \,<br/>&nbsp;<br/>\r
320         The first part is the regular expression to search for. Remember that any commma\r
321         character must be preceded by a backslash, and consequently a literal backslash must\r
322         be written as a pair of backslashes. A description of Java regular expressions can be\r
323         found at:<br/>\r
324         &nbsp;\r
325          <br/>&nbsp;<br/>\r
326         The second part is the text to replace all matches with.</li>\r
327 \r
328                 <li><code>RisAuthors</code> : to be documented.</li>\r
329                 <li><code>RisKeywords</code> : to be documented.</li>\r
330                 <li><code>RisMonth</code> : to be documented.</li>\r
331 \r
332         <li><code>RTFChars</code> : replaces TeX-specific special\r
333         characters (e.g. {\^a} or {\"{o}}) with their RTF\r
334         representations, and translates LaTeX commands \emph, \textit,\r
335         \textbf into RTF equivalents.</li>\r
336 \r
337         <li><code>ToLowerCase</code> : turns all characters into\r
338         lower case.</li>\r
339 \r
340         <li><code>ToUpperCase</code> : turns all characters into\r
341         upper case.</li>\r
342 \r
343         <li><code>WrapContent</code> : This formatter outputs the input value after adding a\r
344         prefix and a postfix, as long as the input value is non-empty. If the input value\r
345         is empty, an empty string is output (the prefix and postfix are not output in this case).\r
346         The formatter requires an argument containing the prefix and postix separated\r
347         by a comma. To include the comma character in either, use an escape sequence\r
348         (\,).</li>\r
349 \r
350         <li><code>WrapFileLinks</code> : See below.</li>\r
351 \r
352         <li><code>XMLChars</code> : replaces TeX-specific special\r
353         characters (e.g. {\^a} or {\"{o}}) with their XML\r
354         representations.</li>\r
355 \r
356     </ul>\r
357 \r
358 <h3>The <code>Authors</code> formatter</h3>\r
359 \r
360 <p>To accommodate for the numerous citation styles, the <code>Authors</code> formatter allows flexible control over the layout of the author list. The formatter takes a comma-separated list of options, by which the default values can be overridden. The following option/value pairs are currently available, where the default values are given in curly brackets.</p>\r
361 <dl>\r
362 <dt><code>AuthorSort = [ {FirstFirst} | LastFirst | LastFirstFirstFirst ]</code></dt>\r
363 <dd>specifies the order in which the author names are formatted.\r
364         <ul>\r
365                 <li><code>FirstFirst</code> : first names are followed by the surname.</li>\r
366                 <li><code>LastFirst</code> : the authors' surnames are followed by their first names, separated by a comma.</li>                \r
367                 <li><code>LastFirstFirstFirst</code> : the first author is formatted as LastFirst, the subsequent authors as FirstFirst.</li>\r
368         </ul>\r
369 </dd>\r
370 \r
371 <dt><code>AuthorAbbr = [ FullName | LastName | {Initials} | InitialsNoSpace | FirstInitial | MiddleInitial ]</code></dt>\r
372 <dd>specifies how the author names are abbreviated.\r
373         <ul>\r
374                 <li><code>FullName</code> : shows full author names; first names are not abbreviated.</li>\r
375                 <li><code>LastName</code> : show only surnames, first names are removed.</li> \r
376                 <li><code>Initials</code> : all first names are abbreviated.</li> \r
377                 <li><code>InitialsNospace</code> : as Initials, with any spaces between initials removed.</li>\r
378                 <li><code>FirstInitial</code> : only first initial is shown.</li> \r
379                 <li><code>MiddleInitial</code> : first name is shown, but all middle names are abbreviated.</li>\r
380         </ul>   \r
381 </dd>\r
382 \r
383 <dt><code>AuthorPunc = [ {FullPunc} | NoPunc | NoComma | NoPeriod ]</code></dt>\r
384 <dd>specifies the punctuation used in the author list when <code>AuthorAbbr</code> is used\r
385         <ul>\r
386                 <li><code>FullPunc</code> : no changes are made to punctuation.</li>\r
387                 <li><code>NoPunc</code> : all full stops and commas are removed from the author name.</li>\r
388                 <li><code>NoComma</code> : all commas are removed from the author name.</li>\r
389                 <li><code>NoPeriod</code> : all full stops are removed from the author name.</li>\r
390         </ul>   \r
391 </dd>\r
392 \r
393 <dt><code>AuthorSep = [ {Comma} | And | Colon | Semicolon | Sep=&lt;string&gt; ]</code></dt>\r
394 <dd>specifies the separator to be used between authors. Any separator can be specified, with the <code>Sep=&lt;string&gt;</code> option. Note that appropriate spaces need to be added around <code>string</code>.</dd> \r
395 \r
396 <dt><code>AuthorLastSep = [ Comma | {And} | Colon | Semicolon | Amp | Oxford | LastSep=&lt;string&gt; ]</code></dt>\r
397 <dd>specifies the last separator in the author list. Any separator can be specified, with the <code>LastSep=&lt;string&gt;</code> option. Note that appropriate spaces need to be added around <code>string</code>.</dd>\r
398 \r
399 <dt><code>AuthorNumber = [ {inf} | &lt;integer&gt; ]</code></dt>\r
400 <dd>specifies the number of authors that are printed. If the number of authors exceeds the maximum specified, the authorlist is replaced by the first author (or any number specified by <code>AuthorNumberEtAl</code>), followed by <code>EtAlString</code>.</dd>\r
401 \r
402 <dt><code>AuthorNumberEtAl = [ {1} | &lt;integer&gt; ]</code></dt>\r
403 <dd>specifies the number of authors that are printed if the total number of authors exceeds <code>AuthorNumber</code>.\r
404 This argument can only be given after <code>AuthorNumber</code> has already been given.</dd>\r
405 \r
406 <dt><code>EtAlString = [ { et al.} | EtAl=&lt;string&gt; ]</code></dt>\r
407 <dd>specifies the string used to replace multiple authors. Any string can be given, using <code>EtAl=&lt;string&gt;</code></dd>\r
408 \r
409 </dl>\r
410 \r
411 <p>If an option is unspecified, the default value (shown in curly brackets above) is used. Therefore, only layout options that differ from the defaults need to be specified. The order in which the options are defined is (mostly) irrelevant. So, for example,</p>\r
412 <p><code>\format[Authors(Initials,Oxford)]{\author}</code></p>\r
413 <p>is equivalent to</p>\r
414 <p><code>\format[Authors(Oxford,Initials)]{\author}</code></p>\r
415 <p>As mentioned, the order in which the options are specified is irrelevant. There is one possibility for ambiguity, and that is if both <code>AuthorSep</code> and <code>AuthorLastSep</code> are given. In that case, the first applicable value encountered would be for <code>AuthorSep</code>, and the second for <code>AuthorLastSep</code>. It is good practise to specify both when changing the default, to avoid ambiguity.</p>\r
416 \r
417 <h4>Examples</h4>\r
418 <p>Given the following authors, <i>"Joe James Doe and Mary Jane and Bruce Bar and Arthur Kay"</i> ,the <code>Authors</code> formatter will give the following results:</p>\r
419 <dl>\r
420 <dt><code>Authors()</code>, or equivalently, <code>Authors(FirstFirst,Initials,FullPunc,Comma,And,inf,EtAl= et al.)</code></dt>\r
421 <dd><pre>J. J. Doe, M. Jane, B. Bar and A. Kay</pre></dd>\r
422 \r
423 <dt><code>Authors(LastFirstFirstFirst,MiddleInitial,Semicolon)</code></dt>\r
424 <dd><pre>Doe, Joe J.; Mary Jane; Bruce Bar and Arthur Kay</pre></dd>\r
425 \r
426 <dt><code>Authors(LastFirst,InitialsNoSpace,NoPunc,Oxford)</code></dt>\r
427 <dd><pre>Doe JJ, Jane M, Bar B, and Kay A</pre></dd>\r
428 \r
429 <dt><code>Authors(2,EtAl= and others)</code></dt>\r
430 <dd><pre>J. J. Doe and others</pre></dd>\r
431 </dl>\r
432 <p>Most commonly available citation formats should be possible with this formatter. For even more advanced options, consider using the Custom Formatters detailed below.</p>\r
433 \r
434 <h3>The <code>WrapFileLinks</code> formatter</h3>\r
435 \r
436 <p>This formatter iterates over all file links, or all file links of a specified type, outputting a format string given as the first argument. The format string can contain a number of escape sequences indicating file link information to be inserted into the string.</p>\r
437 <p>This formatter can take an optional second argument specifying the name of a file type. If specified, the iteration will only include those files with a file type matching the given name (case-insensitively). If specified as an empty argument, all file links will be included.</p>\r
438 <p> After the second argument, pairs of additional arguments can be added in order to specify regular expression replacements to be done upon the inserted link information before insertion into the output string. A non-paired argument will be ignored. In order to specify replacements without filtering on file types, use an empty second argument.</p>\r
439 <p>The escape sequences for embedding information are as follows:</p>\r
440 <ul>\r
441         <li><code>\i</code> : This inserts the iteration index (starting from 1), and can be useful if the output list of files should be enumerated.</li>\r
442         <li><code>\p</code> : This inserts the file path of the file link.</li>\r
443         <li><code>\f</code> : This inserts the name of the file link's type.</li>\r
444         <li><code>\x</code> : This inserts the file's extension, if any.</li>\r
445         <li><code>\d</code> : This inserts the file link's description, if any.</li>\r
446 </ul>\r
447 <p>For instance, an entry could contain a file link to the file "/home/john/report.pdf" of the "PDF" type with description "John's final report". Using the WrapFileLinks formatter with the following argument:</p>\r
448 <p><code>\format[WrapFileLinks(\i. \d (\p))]{\file}</code></p>\r
449 <p>would give the following output:</p>\r
450 <pre>\r
451     1. John's final report (/home/john/report.pdf)\r
452 \r
453 </pre>\r
454 <p>If the entry contained a second file link to the file "/home/john/draft.txt" of the "Text file" type with description 'An early "draft"', the output would be as follows:</p>\r
455 <pre>\r
456     1. John's final report (/home/john/report.pdf)\r
457     2. An early "draft" (/home/john/draft.txt)\r
458 \r
459 </pre>\r
460 <p>If the formatter was called with a second argument, the list would be filtered. For instance:</p>\r
461 <p><code>\format[WrapFileLinks(\i. \d (\p),,text file)]{\file}</code></p>\r
462 <p> would show only the text file:</p>\r
463 <pre>\r
464     1. An early "draft" (/home/john/draft.txt)\r
465 \r
466 </pre>\r
467 <p>If we wanted this output to be part of an XML styled output, the quotes in the file description could cause problems. Adding two additional arguments to translate the quotes into XML characters solves this:</p>\r
468 <p><code>\format[WrapFileLinks(\i. \d (\p),,text file,",&amp;quot;)]{\file}</code></p>\r
469 <p>would give the following output:</p>\r
470 <pre>\r
471     1. An early &quot;draft&quot; (/home/john/draft.txt)\r
472 \r
473 </pre>\r
474 <p>Additional pairs of replacements could be added.</p>\r
475 \r
476 \r
477     <h3>Custom formatters</h3>\r
478     <p>If none of the available formatters can do what you want to\r
479     achieve, you can add your own by implementing the\r
480     <code>net.sf.jabref.export.layout.LayoutFormatter</code>\r
481     interface. If you insert your class into the\r
482     <code>net.sf.jabref.export.layout.format</code> package, you\r
483     can call the formatter by its class name only, like with the\r
484     standard formatters. Otherwise, you must call the formatter by\r
485     its fully qualified name (including package name). In any case,\r
486     the formatter must be in your classpath when running\r
487     JabRef.</p>\r
488 \r
489     <h2 id="NameFormatter">Using Custom Name Formatters</h2>\r
490 \r
491     <p>From JabRef 2.2, it is possible to define custom name\r
492     formatters using the bibtex-sty-file syntax. This allows\r
493     ultimate flexibility, but is a cumbersome to write</p>\r
494 \r
495     <p>You can define your own formatter in the preference tab\r
496     "Name Formatter" using the following format and then use it\r
497     with the name given to it as any other formatter</p>\r
498     <code>&lt;case1&gt;@&lt;range11&gt;@&lt;format&gt;@&lt;range12&gt;@&lt;format&gt;@&lt;range13&gt;...@@<br />\r
499 \r
500      &lt;case2&gt;@&lt;range21&gt;@... and so on.</code>\r
501 \r
502     <p>This format first splits the task to format a list of author\r
503     into cases depending on how many authors there are (this is\r
504     since some formats differ depending on how many authors there\r
505     are). Each individual case is separated by @@ and contains\r
506     instructions on how to format each author in the case. These\r
507     instructions are separated by a @.</p>\r
508 \r
509     <p>Cases are identified using integers (1, 2, 3, etc.) or the\r
510     character * (matches any number of authors) and will tell the\r
511     formatter to apply the following instructions if there are a\r
512     number of less or equal of authors given.</p>\r
513 \r
514     <p>Ranges are either\r
515     <code>&lt;integer&gt;..&lt;integer&gt;</code>,\r
516     <code>&lt;integer&gt;</code> or the character <code>*</code>\r
517     using a 1 based index for indexing authors from the given list\r
518     of authors. Integer indexes can be negative to denote them to\r
519     start from the end of the list where -1 is the last author.</p>\r
520 \r
521     <p>For instance with an authorlist of "Joe Doe and Mary Jane\r
522     and Bruce Bar and Arthur Kay":</p>\r
523 \r
524     <ul>\r
525         <li>1..3 will affect Joe, Mary and Bruce</li>\r
526 \r
527         <li>4..4 will affect Arthur</li>\r
528 \r
529         <li>* will affect all of them</li>\r
530 \r
531         <li>2..-1 will affect Mary, Bruce and Arthur</li>\r
532     </ul>\r
533 \r
534     <p>The <code>&lt;format&gt;</code>-strings use the Bibtex\r
535     formatter format:</p>\r
536 \r
537     <p>The four letters v, f, l, j indicate the name parts von,\r
538     first, last, jr which are used within curly braces. A single\r
539     letter v, f, l, j indicates that the name should be\r
540     abbreviated. If one of these letters or letter pairs is\r
541     encountered JabRef will output all the respective names\r
542     (possibly abbreviated), but the whole expression in curly\r
543     braces is only printed if the name part exists.</p>\r
544 \r
545     <p>For instance if the format is "{ll} {vv {von Part}} {ff}"\r
546     and the names are "Mary Kay and John von Neumann", then JabRef\r
547     will output "Kay Mary" (with two space between last and first)\r
548     and "Neuman von von Part John".</p>\r
549 \r
550     <p>I give two examples but would rather point you to the bibtex\r
551     documentation.</p>\r
552 \r
553     <p>Small example: <code>"{ll}, {f.}"</code> will turn\r
554     <code>"Joe Doe"</code> into <code>"Doe, J."</code></p>\r
555 \r
556     <p>Large example:</p>\r
557 \r
558     <blockquote>\r
559         <p>To turn:</p>\r
560 \r
561         <p><code>"Joe Doe and Mary Jane and Bruce Bar and Arthur\r
562         Kay"</code></p>\r
563 \r
564         <p>into</p>\r
565 \r
566         <p><code>"Doe, J., Jane, M., Bar, B. and Kay,\r
567         A."</code></p>\r
568 \r
569         <p>you would use</p>\r
570 \r
571         <p><code>1@*@{ll}, {f}.@@2@1@{ll}, {f}.@2@ and {ll},\r
572         {f}.@@*@1..-3@{ll}, {f}., @-2@{ll}, {f}.@-1@ and {ll},\r
573         {f}.</code></p>\r
574     </blockquote>\r
575 \r
576     <p>If somebody would like to write a better tutorial about\r
577     this: Write a mail to one of the JabRef mailinglists!</p>\r
578 \r
579 \r
580 </body>\r
581 </html>\r