<?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>Some TeX Developments</title>
	<atom:link href="http://www.texdev.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.texdev.net</link>
	<description>Coding in the TeX world</description>
	<lastBuildDate>Wed, 16 May 2012 07:19:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Co-ordinating biblatex style development</title>
		<link>http://www.texdev.net/2012/05/16/co-ordinating-biblatex-style-development/</link>
		<comments>http://www.texdev.net/2012/05/16/co-ordinating-biblatex-style-development/#comments</comments>
		<pubDate>Wed, 16 May 2012 07:19:52 +0000</pubDate>
		<dc:creator>Joseph Wright</dc:creator>
				<category><![CDATA[biblatex]]></category>

		<guid isPermaLink="false">http://www.texdev.net/?p=1376</guid>
		<description><![CDATA[Bibliographies formatting is complicated, and over the years this has led to the development of a lot of BibTeX styles and tools like custom-bib. For biblatex users the output style can be altered from within LaTeX, and while there is not yet an equivalent of custom-bib for biblatex there is some excellent advice available for [...]]]></description>
			<content:encoded><![CDATA[<p>Bibliographies formatting is complicated, and over the years this has led to the development of a lot of BibTeX styles and tools like <a href="http://ctan.org/pkg/custom-bib">custom-bib</a>. For <a href="http://ctan.org/pkg/biblatex">biblatex</a> users the output style can be altered from within LaTeX, and while there is not yet an equivalent of custom-bib for biblatex there is some <a href="http://tex.stackexchange.com/a/13076/73">excellent advice</a> available for developing new styles.</p>
<p>One of the key ideas of  is to make it possible to address the citation styles in fields where BibTeX could never provide the correct tools. That shows up most obviously in humanities, where the position of citations in the output needs to feed back into how they appear. Life gets even more complicated when you consider areas that need specialised fields included in their bibliographies: a classic example is law. There are already developments under-way to help support these situation, for example <a href="http://biblatex-biber.sourceforge.net/">Biber</a>-based flexible data model. Addressing the needs of style authors properly requires co-ordination between the <a title="biblatex: A team to continue the work" href="http://www.texdev.net/2012/04/23/biblatex-a-team-to-continue-the-work/">core biblatex team</a> and the style creators, and between different style authors. The question of how to achieve this communication <a href="http://tex.stackexchange.com/q/55235/73">came up recently on TeX-sx</a>.</p>
<p>There are at least a couple of obvious ways for people to stay in touch with each other. First, where there is a need for a specific function to be added to biblatex, the <a href="https://github.com/plk/biblatex/">package GitHub site</a> is the place to go. Adding issues makes sure that they don&#8217;t get lost in direct e-mails, and also ensures that anyone with a point of view can comment. Secondly, for more open discuss TUG have a <a href="http://tug.org/mailman/listinfo/biblio">bibliography mailing list</a>. To date, this has not been very heavy in terms of traffic, but it would be an ideal forum to co-ordinate effort. It&#8217;s publicly archived and anyone can join, so there is no danger of loosing important comments.</p>
<p>Of course, there are other ways to communicate too! All of the team are active on <a href="http://tex.stackexchange.com">TeX-sx</a>, and when we can we pick up biblatex issues and add them to the to do list. Direct e-mail works too, and I&#8217;m sure some style authors will go for direct communication. The key thing is to use the power of biblatex to make life easier for the end-user.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.texdev.net/2012/05/16/co-ordinating-biblatex-style-development/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>LaTeX3 gets a new FPU</title>
		<link>http://www.texdev.net/2012/05/15/latex3-gets-a-new-fpu/</link>
		<comments>http://www.texdev.net/2012/05/15/latex3-gets-a-new-fpu/#comments</comments>
		<pubDate>Tue, 15 May 2012 14:58:38 +0000</pubDate>
		<dc:creator>Joseph Wright</dc:creator>
				<category><![CDATA[LaTeX3]]></category>
		<category><![CDATA[floating point]]></category>

		<guid isPermaLink="false">http://www.texdev.net/?p=1367</guid>
		<description><![CDATA[For a while now we&#8217;ve been promising to update the floating point functions in LaTeX3 to provide an expandable approach to calculations. We are now making good progress in swapping the old code for the new material. There are still a few things to be decided, but the general plan looks pretty clear. The new [...]]]></description>
			<content:encoded><![CDATA[<p>For a while now we&#8217;ve been promising to update the floating point functions in LaTeX3 to provide an expandable approach to calculations. We are now making good progress in swapping the old code for the new material. There are still a few things to be decided, but the general plan looks pretty clear.</p>
<p>The new code lets you parse floating point expressions in the same way you can for integers. So you can write</p>
<pre>\fp_eval:n { 10 / 3  + 0.35 }</pre>
<p>and get the output</p>
<pre>3.683333333333333</pre>
<p>without needing to worry about working with dimensions. Even more usefully, there are a range of built in mathematical functions, so things like</p>
<pre>\fp_eval:n { sin ( pi / 3 ) }</pre>
<p>gives</p>
<pre>0.8660254037844386</pre>
<p>as you&#8217;d want.</p>
<p>You might pick up from the above output that the new FPU works to a higher accuracy than the old one: 16 significant figures. That&#8217;s been done without a bad performance hit: great credit goes to Bruno Le Floch for the work on this. Of course, you don&#8217;t have to have 16 figure output: the code includes rounding functions and various display options, so for example</p>
<pre>\fp_eval:n { round ( sin ( pi / 3 ) , 3 ) }</pre>
<p>At the moment you&#8217;ll have to grab the latest <a href="https://github.com/latex3/svn-mirror">development code</a> to get this new version as part of expl3, but it will be in the next <a href="http://www.ctan.org/">CTAN</a> snapshot some time in June. You might also find that not every function you want implemented is available: for example, there are currently no inverse trigonometric functions. Those are all on the to do list, but there not needed for typesetting so may be a little while.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.texdev.net/2012/05/15/latex3-gets-a-new-fpu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The LPPL: &#8216;maintainer&#8217; or &#8216;author-maintained&#8217;</title>
		<link>http://www.texdev.net/2012/05/04/the-lppl-maintainer-or-author-maintained/</link>
		<comments>http://www.texdev.net/2012/05/04/the-lppl-maintainer-or-author-maintained/#comments</comments>
		<pubDate>Fri, 04 May 2012 09:27:47 +0000</pubDate>
		<dc:creator>Joseph Wright</dc:creator>
				<category><![CDATA[LaTeX]]></category>
		<category><![CDATA[LPPL]]></category>

		<guid isPermaLink="false">http://www.texdev.net/?p=1361</guid>
		<description><![CDATA[The LaTeX Project Public License (LPPL) was written to allow development of LaTeX code in a way that is free as in speech while also making sure that LaTeX users get what they expect when they \usepackage{foo} Frank Mittelbach wrote an excellent overview of how the LPPL was developed for TUGBoat last year, where he [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://www.latex-project.org/lppl/">LaTeX Project Public License (LPPL)</a> was written to allow development of LaTeX code in a way that is free as in speech while also making sure that LaTeX users get what they expect when they</p>
<pre>\usepackage{foo}</pre>
<p>Frank Mittelbach wrote an <a href="https://www.tug.org/members/TUGboat/tb32-1/tb100mitt.pdf">excellent overview</a> of how the LPPL was developed for <a href="http://tug.org/tugboat/"><em>TUGBoat</em></a> last year, where he discussed the balance between the rights of the coder and the rights of the person using the code!</p>
<p>The LPPL is designed to deal with packages which are both ‘maintained’ and ‘unmaintained’, and provides a way to allow new maintainers to take over unmaintained material. It also allows for packages to be ‘author-maintained’, which sounds similar to just ‘maintained’ but is significantly different.</p>
<p>Packages which are either ‘maintained’  or  ‘author-maintained’ have one or more people looking after it, and they are responsible for making changes to the code. The difference comes if those people disappear (as has <a title="biblatex status" href="http://www.texdev.net/2012/04/03/biblatex-status/">happened recently with biblatex</a>). With a ‘maintained’ package, it&#8217;s possible for a new person or team to make a public statement that they are going to take over, then after a delay they become the new maintainers. On the other hand, a package which is ‘author-maintained’ cannot be taken over by someone else.</p>
<p>Now, the LPPL is a ‘free’ license and so it is always possible to create a fork from an existing package. In general, you don&#8217;t really want to do that simply to keep updating an existing package: taking over maintenance is much clearer all round. For biblatex, we can&#8217;t do that as it&#8217;s ‘author-maintained’. So we&#8217;re going to have to <a title="biblatex: A team to continue the work" href="http://www.texdev.net/2012/04/23/biblatex-a-team-to-continue-the-work/">formally fork the project</a>, mark the ‘new’ version as distinct from the old (Philipp Lehman) version and ensure that both remain on CTAN: not ideal.</p>
<p>So I&#8217;d urge people to mark their LPPL code as ‘maintained’  rather than  ‘author-maintained’.  You never know what might happen, and ‘maintained’ status works pretty well.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.texdev.net/2012/05/04/the-lppl-maintainer-or-author-maintained/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>babel gets back on track</title>
		<link>http://www.texdev.net/2012/05/01/babel-gets-back-on-track/</link>
		<comments>http://www.texdev.net/2012/05/01/babel-gets-back-on-track/#comments</comments>
		<pubDate>Tue, 01 May 2012 16:52:39 +0000</pubDate>
		<dc:creator>Joseph Wright</dc:creator>
				<category><![CDATA[LaTeX]]></category>
		<category><![CDATA[babel]]></category>

		<guid isPermaLink="false">http://www.texdev.net/?p=1358</guid>
		<description><![CDATA[Posted today to the LaTeX-L list by Javier Bezos Babel gets back on track and it is again actively maintained. The goals are mainly to fix bugs, to make it compatible with XeTeX and LuaTeX (as far as possible), and perhaps to add some minor new features (provided they are backward compatible). No attempt will [...]]]></description>
			<content:encoded><![CDATA[<p>Posted today to the <a href="http://news.gmane.org/group/gmane.comp.tex.latex.latex3">LaTeX-L</a> list by Javier Bezos</p>
<blockquote><p>Babel gets back on track and it is again actively maintained. The goals are mainly to fix bugs, to make it compatible with XeTeX and LuaTeX (as far as possible), and perhaps to add some minor new features (provided they are backward compatible).</p>
<p>No attempt will be done to take full advantage of the features provided by XeTeX and LuaTeX, which would require a completely new core (as for example polyglossia or as part of LaTeX3).</p>
<p>Your comments or suggestions (or questions!) are welcomed.</p></blockquote>
<p>Hopefully we&#8217;ll see some long-standing babel bugs sorted out in the near future: many thanks to Javier for taking this up!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.texdev.net/2012/05/01/babel-gets-back-on-track/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Goodies from DANTE</title>
		<link>http://www.texdev.net/2012/04/30/goodies-from-dante/</link>
		<comments>http://www.texdev.net/2012/04/30/goodies-from-dante/#comments</comments>
		<pubDate>Mon, 30 Apr 2012 19:13:54 +0000</pubDate>
		<dc:creator>Joseph Wright</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.texdev.net/?p=1353</guid>
		<description><![CDATA[I recently discovered that you can read issues most of Die TeXnische Komödie online. My German is good enough to get the gist of the articles, and there is some interesting stuff there. I&#8217;ve always meant to join DANTE, if only to support their core CTAN server, and so this seemed like an ideal opportunity. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.texdev.net/wp-content/uploads/2012/04/DANTE.jpg"><img class="alignright size-medium wp-image-1354" title="DANTE" src="http://www.texdev.net/wp-content/uploads/2012/04/DANTE-300x167.jpg" alt="DANTE Goodies" width="300" height="167" /></a>I <a title="Die TeXnische Komödie online" href="http://www.texdev.net/2012/04/20/die-texnische-komodie-online/">recently discovered</a> that you can read issues most of <a href="http://www.dante.de/DTK.html"><em>Die TeXnische Komödie</em></a> online. My German is good enough to get the gist of the articles, and there is some interesting stuff there. I&#8217;ve always meant to join <a href="http://www.dante.de/">DANTE</a>, if only to support their core CTAN server, and so this seemed like an ideal opportunity. So in the post this week I got the various goodies that they send out: I particularly like the sticker!</p>
<p>What&#8217;s particular interesting for me is the section in <em>Die TeXnische Komödie</em> detailing the various TeX-related meet-ups that take place in Germany: there are a lot! Here in the UK, I&#8217;m pleased that <a href="http://uk.tug.org/">UK-TUG</a> manages a couple of training courses and a single speaker meeting/AGM every year. It&#8217;s quite a contrast!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.texdev.net/2012/04/30/goodies-from-dante/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Programming LaTeX3: More on expansion</title>
		<link>http://www.texdev.net/2012/04/29/programming-latex3-more-on-expansion/</link>
		<comments>http://www.texdev.net/2012/04/29/programming-latex3-more-on-expansion/#comments</comments>
		<pubDate>Sun, 29 Apr 2012 11:24:03 +0000</pubDate>
		<dc:creator>Joseph Wright</dc:creator>
				<category><![CDATA[LaTeX3]]></category>
		<category><![CDATA[Programming LaTeX3]]></category>

		<guid isPermaLink="false">http://www.texdev.net/?p=1341</guid>
		<description><![CDATA[In the last post, I looked at the idea of expandability, and how we can use x-type expansion to exhaustively expand an argument. I also said that there was more to this, and hinted at two other argument specifications, f- and o-type expansion. We need these because TeX is a macro-expansion language, and while LaTeX3 [...]]]></description>
			<content:encoded><![CDATA[<p>In the <a title="Programming LaTeX3: Expandability" href="http://www.texdev.net/2012/04/21/programming-latex3-expandability/">last post</a>, I looked at the idea of expandability, and how we can use <code>x</code>-type expansion to exhaustively expand an argument. I also said that there was more to this, and hinted at two other argument specifications, <code>f</code>- and <code>o</code>-type expansion. We need these because TeX is a macro-expansion language, and while LaTeX3 coding does hide some of this detail it certainly does not get rid of all of it. Both of these forms of expansion are somewhat specialised, but both are also necessary!</p>
<h2>Full (or forced) expansion</h2>
<p>The <code>f</code>-type (‘full’ or ‘force’) expansion argument is in some ways similar to the <code>x</code>-type concept, as it&#8217;s about trying to expand as much as possible. So</p>
<pre>\tl_set:Nn \l_tmpa_tl { foo }
\tl_set:Nn \l_tmpb_tl { \l_tmpa_tl }
\tl_set:Nx \l_tmpc_tl{ \l_tmpb_tl }
\tl_show:N \l_tmpc_tl</pre>
<p>and</p>
<pre>\tl_set:Nn \l_tmpa_tl { foo }
\tl_set:Nn \l_tmpb_tl { \l_tmpa_tl }
\tl_set:Nf \l_tmpc_tl{ \l_tmpb_tl }
\tl_show:N \l_tmpc_tl</pre>
<p>give the same result: everything is expanded, and <code>\l_tmpc_tl</code> contains <code>‘foo</code>’. There are two crucial differences, however. First, <code>x</code>-type variants are not expandable, even if their parent function was. On the other hand, <code>f</code>-type expansion is itself expandable. So something like</p>
<pre>\cs_new:Npn \my_function:n { \tl_length:n {#1} }
\int_eval:n { \exp_args:Nf \my_function:n { \l_tmpa_tl } + 1 }</pre>
<p>will work as we&#8217;d want: <code>\l_tmpa_tl</code> will be expanded, then processed by <code>\my_function:n</code> and the result will be evaluated as an integer. Try that with <code>\exp_args:Nx</code> and it will fail.</p>
<p>The second difference is what happens when we hit a non-expandable token. With <code>x</code>-type expansion, TeX will look at the next thing in the input, and so tries to expand <em>everything</em> in the input (hence ‘exhaustive’). On the other hand, <code>f</code>-type expansion stops when the first non-expandable token is found. So</p>
<pre>\tl_set:Nn \l_tmpa_tl { foo }
\tl_set:Nn \l_tmpb_tl { bar }
\tl_set:Nf \l_tmpc_tl { \l_tmpa_tl \l_tmpb_tl }
\tl_show:N \l_tmpc_tl</pre>
<p>will show</p>
<pre>foo\l_tmpb_tl</pre>
<p>That happens because the <code>f</code> in <code>foo</code> is not expandable. So <code>f</code>-type expansion stops before it gets to <code>\l_tmpb_tl</code>, while <code>x</code>-type expansion would keep going.</p>
<p>The second point is important as it means that some functions will not give the expected result if used inside an <code>f</code>-type expansion. We show this in the <a href="http://texdoc.net/pkg/source3">code documentation</a> for LaTeX3: functions which fully expand inside both <code>f</code>- and <code>x</code>-type expansions are shown with a hollow star, while those that only work inside an <code>x</code>-type expansion are shown with a filled star.</p>
<p>As you might pick up, <code>f</code>-type expansion is somewhat specialised. It&#8217;s useful when creating expandable commands, but for non-expandable ones <code>x</code>-type expansion is usually more appropriate.</p>
<h2>Expanding just the once</h2>
<p>As TeX is a macro expansion language, there are some tasks that are best carried out, or even only doable, using an exact number of expansions. To allow a single expansion, the argument specification <code>o</code> (‘once’) is available. To use this, you need to know what will happen after exactly one expansion. Functions which may be useful in this way have information about their expansion behaviour included in the documentation, while token list variables also expand to their content after exactly one expansion. Examples using <code>o</code>-type expansion tend to be low-level: perhaps the best example is dropping the first token from some input, so</p>
<pre>\tl_set:No \l_tmpa_tl { \use_none:n tokens }
\tl_show:N \l_tmpa_tl</pre>
<p>will show ‘<code>okens</code>’.</p>
<p>As with <code>f</code>-type expansion, expanding just once is something of a specialist tool, but one that is needed. It also completes the types of argument specification we can use, so we&#8217;re now in a position to do some more serious LaTeX3 programming.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.texdev.net/2012/04/29/programming-latex3-more-on-expansion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Text blocks on both sides of the header</title>
		<link>http://www.texdev.net/2012/04/26/text-blocks-on-both-sides-of-the-header/</link>
		<comments>http://www.texdev.net/2012/04/26/text-blocks-on-both-sides-of-the-header/#comments</comments>
		<pubDate>Thu, 26 Apr 2012 07:37:29 +0000</pubDate>
		<dc:creator>Joseph Wright</dc:creator>
				<category><![CDATA[LaTeX]]></category>

		<guid isPermaLink="false">http://www.texdev.net/?p=1338</guid>
		<description><![CDATA[A while ago, I wrote a short series on creating a CV in LaTeX. I&#8217;ve made a few adjustments recently, both to my CV and my letter of application, and one issue came up in both of them: putting text on both sides of the header. For my CV, I wanted to split the address [...]]]></description>
			<content:encoded><![CDATA[<p>A while ago, I wrote a <a title="Writing a curriculum vitae in LaTeX: Part 1" href="http://www.texdev.net/2011/11/05/writing-a-curriculum-vitae-in-latex-part-1/">short series on creating a CV in LaTeX</a>. I&#8217;ve made a few adjustments recently, both to my CV and my letter of application, and one issue came up in both of them: putting text on both sides of the header.</p>
<p>For my CV, I wanted to split the address block I put at the top into two parts: address on one side, phone numbers on the other. The easiest way to do that turns out to be a tabular</p>
<pre>
\noindent
\begin{tabular}{@{}p{0.5\textwidth}@{}p{0.5\textwidth}@{}}
  \raggedright
  \textbf{Name} \\
  Address Line 1\\
  Address Line 2\\
  ...
  &#038;
  \raggedleft
  \null               \par
  Tel.\ xxx xxxxxx    \\
  Mobile yyy yyy yyyy \\
  someone@some.domain
\end{tabular}
</pre>
<p>There are a few things to notice here. First, I&#8217;ve made the table columns take up all of the width of the page by using <code>@{}</code> to remove any inter-column space, then divided the available space up exactly. I&#8217;ve used <code>\raggedleft</code> to push the phone numbers to the right-hand margin, and have forced a blank line at the top of the phone number block so the name comes above everything.</p>
<p>For my letter, I wanted the two blocks again but needed both to be ragged right and with the right-hand one pushed to the right margin. That needs a couple of tables</p>
<pre>
  \begin{tabular}{@{}p{0.5\textwidth}@{}p{0.5\textwidth}@{}}
    \raggedright
    \toname
    \\
    \toaddress
    \hfil
  &#038;
    \raggedleft
    \begin{tabular}[t]{l@{}}
      \ignorespaces
      \fromaddress
      \\[1 em]%
      \@date
    \end{tabular}
  \end{tabular}
</pre>
<p>(This is an adjustment of the standard <code>letter</code> class, hence the various storage macros.) What you&#8217;ll notice here is that I&#8217;ve used a nested tabular purely to get the alignment right: the <code>[t]</code> argument is vital to get both blocks to line up at the top of the page.</p>
<p>Both of these are quite easy once you know how, but it took a while to get them spot-on!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.texdev.net/2012/04/26/text-blocks-on-both-sides-of-the-header/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>arara: Making LaTeX files your way</title>
		<link>http://www.texdev.net/2012/04/24/arara-making-latex-files-your-way/</link>
		<comments>http://www.texdev.net/2012/04/24/arara-making-latex-files-your-way/#comments</comments>
		<pubDate>Tue, 24 Apr 2012 20:17:49 +0000</pubDate>
		<dc:creator>Joseph Wright</dc:creator>
				<category><![CDATA[LaTeX]]></category>
		<category><![CDATA[arara]]></category>

		<guid isPermaLink="false">http://www.texdev.net/?p=1333</guid>
		<description><![CDATA[Building a LaTeX source of any complexity means doing more than a single LaTeX run, for example requiring BibTeX or MakeIndex runs along with multiple LaTeX passes. There are several ways to automate this: you can build your own script or use auto-build tools such as latexmk or Rubber. These tools work by checking for [...]]]></description>
			<content:encoded><![CDATA[<p>Building a LaTeX source of any complexity means doing more than a single LaTeX run, for example requiring BibTeX or MakeIndex runs along with multiple LaTeX passes. There are several ways to automate this: you can build your own script or use auto-build tools such as <a href="http://www.phys.psu.edu/~collins/software/latexmk-jcc/">latexmk</a> or <a href="https://launchpad.net/rubber">Rubber</a>. These tools work by checking for changes in the various auxiliary files that LaTeX creates, so they can work out how many runs are needed. However, a lot of users prefer to retain control of building, and so do the various steps by hand.</p>
<p>There is now a tool that leaves the user in control but which helps to automate building: <a href="https://github.com/cereda/arara">arara</a> by <a href="http://tex.stackexchange.com/users/3094/paulo-cereda">Paulo Cereda</a>. Arara is a Java-based system, which will automatically run the tools you ask it to based on comments in your source. It&#8217;s also up to you to set up the tools you want: you can already <a href="https://github.com/marcodaniel/arara/tree/master/rules/plain">get quite a selection</a> thanks to <a href="http://tex.stackexchange.com/users/5239/marco-daniel">Marco Daniel</a>.</p>
<p>How does this work then? In your LaTeX source, you have something like</p>
<pre>% arara: pdflatex
% arara: bibtex
% arara: pdflatex
% arara: pdflatex</pre>
<p>which as you might guess does the classic pdfLaTeX, BibTeX, pdfLaTeX, pdfLaTeX cycle (assuming you have created rules called <code>pdflatex</code> and <code>bibtex</code>). Life gets a bit more interesting when you start adding options to the different tools. For example, if you want to allow shell escape for just one file, you can do</p>
<pre>% arara: pdflatex: { shell : yes }
% arara: bibtex
% arara: pdflatex: { shell : yes }
% arara: pdflatex: { shell : yes }</pre>
<p>without needing to leave it on for everything. As you can edit the rules easily, it&#8217;s very easy to add specialist options for the way <em>you</em> work, even if no-one else would ever be interested in them. It also makes it easy to run both pdfLaTeX and traditional dvips routes without having to alter the settings in your editor: just add the appropriate arara rules to your files, and the correct route is chosen automatically.</p>
<p>Arara is very much in development at the moment, and that means there are a few rough edges. For example, you have to set up the right bits and pieces yourself: no installer just yet! However, it looks like a great way to have control over exactly what gets run without needing to script everything yourself.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.texdev.net/2012/04/24/arara-making-latex-files-your-way/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>biblatex: A team to continue the work</title>
		<link>http://www.texdev.net/2012/04/23/biblatex-a-team-to-continue-the-work/</link>
		<comments>http://www.texdev.net/2012/04/23/biblatex-a-team-to-continue-the-work/#comments</comments>
		<pubDate>Mon, 23 Apr 2012 21:04:04 +0000</pubDate>
		<dc:creator>Joseph Wright</dc:creator>
				<category><![CDATA[biblatex]]></category>

		<guid isPermaLink="false">http://www.texdev.net/?p=1327</guid>
		<description><![CDATA[I posted a while ago about biblatex, looking for news of the author, Philipp Lehman. He&#8217;d been very active in replying to bug reports up to about 5 months ago, since when no-one has heard from him. As I said before, that&#8217;s a big concern well beyond LaTeX work, but it&#8217;s also left a question [...]]]></description>
			<content:encoded><![CDATA[<p>I <a title="biblatex status" href="http://www.texdev.net/2012/04/03/biblatex-status/">posted a while ago</a> about <a href="http://ctan.org/pkg/biblatex">biblatex</a>, looking for news of the author, Philipp Lehman. He&#8217;d been very active in replying to bug reports up to about 5 months ago, since when no-one has heard from him. As I said before, that&#8217;s a big concern well beyond LaTeX work, but it&#8217;s also left a question over continued development of biblatex.</p>
<p>Philipp Lehman had discussed a number of plans with the lead developer of <a href="http://biblatex-biber.sourceforge.net/">Biber</a>, Philip Kime. Unsurprisingly, Philip Kime has been keen to make sure that development of biblatex continues, but he wanted some help with the styles and any ‘hard-core’ TeX stuff. So a small team of ‘biblatex maintainers’ has been set up:</p>
<ul>
<li><a href="http://tex.stackexchange.com/users/1657/plk">Philip Kime</a> (lead)</li>
<li><a href="http://tex.stackexchange.com/users/4483/audrey">Audrey Boruvka</a></li>
<li>Me</li>
</ul>
<p>We&#8217;ve got two separate tasks. First, we want to deal with issues with the current release of biblatex (v1.7). These are <a href="http://sourceforge.net/tracker/?group_id=244752&amp;atid=1126005">tracked on the SourceForge site</a>, and there are a few outstanding which are being looked at. Second, we want to continue the work that Philipp Lehman had planned. That work is taking place on <a href="https://github.com/plk/biblatex/">GitHub</a>, and there are some big issues to tackle.</p>
<p>Perhaps the biggest single item on the horizon for biblatex 2.0 is dropping BibTeX support, and going Biber-only. That&#8217;s something that Philipp Lehman has been planning for some time: the reality is that supporting BibTeX is increasingly awkward, and it&#8217;s making adding new features increasingly complex (and bug-prone). Of course, dropping BibTeX support will be a significant change, but it&#8217;s been on the horizon for some time, and will open the way to further extending the data model biblatex (and Biber) user.</p>
<p>Of course, if Philipp Lehman does return (and we hope he does), then the ‘team’ will be very happy to hand back to him. For the moment, sticking with the roadmap seems the best way forward.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.texdev.net/2012/04/23/biblatex-a-team-to-continue-the-work/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Programming LaTeX3: Expandability</title>
		<link>http://www.texdev.net/2012/04/21/programming-latex3-expandability/</link>
		<comments>http://www.texdev.net/2012/04/21/programming-latex3-expandability/#comments</comments>
		<pubDate>Sat, 21 Apr 2012 19:02:58 +0000</pubDate>
		<dc:creator>Joseph Wright</dc:creator>
				<category><![CDATA[LaTeX3]]></category>
		<category><![CDATA[Programming LaTeX3]]></category>

		<guid isPermaLink="false">http://www.texdev.net/?p=1302</guid>
		<description><![CDATA[In the last part, I looked at integer expressions, and how they can be used to calculate integer values. What I did not do was say exactly what can go inside an integer expression. That&#8217;s because it links in to a wider concept, and one that is very familiar to TeX programmers: expandability. What is [...]]]></description>
			<content:encoded><![CDATA[<p>In the <a title="Programming LaTeX3: Integers and integer expressions" href="http://www.texdev.net/2012/02/07/programming-latex3-integers-and-integer-expressions/">last part</a>, I looked at integer expressions, and how they can be used to calculate integer values. What I did not do was say exactly what can go inside an integer expression. That&#8217;s because it links in to a wider concept, and one that is very familiar to TeX programmers: expandability.</p>
<h2>What is expandability?</h2>
<p>To understand expandability, we need to think about what TeX does when we use functions. TeX is a macro expansion language, and as I&#8217;ve already said that means that LaTeX3 is too. When we use a function in a place where TeX can execute all of the built-in commands (‘primitives’), we don&#8217;t really need to worry about that too much. However, there are places where life is more complicated, as TeX will only execute some of the primitives. These places are ‘expansion contexts’. In these places, only some functions will work as expected, and so it&#8217;s important to know what will and will not work.</p>
<h2>LaTeX3 and expandability</h2>
<p>For traditional TeX programmers, understanding expandability means knowing the rules that TeX applies to decide what can and cannot be expanded. For LaTeX3, life is different as the documentation includes details of what will and will not work. If you <a href="http://texdoc.net/pkg/interface3">read the documentation</a>, you will see that some functions are marked with a star: those are expandable. For the moment, we won&#8217;t worry about the non-starred functions, other than to note that we can&#8217;t use them when we need expandability.</p>
<p>So sticking with our starting point, integer expressions, if we look at a function like <code>\int_eval:n</code>, this leads to the conclusion that the argument can only contain</p>
<ul>
<li>Numbers, either given directly or stored inside variables</li>
<li>The symbols <code>+</code>, <code>-</code>, <code>*</code>, <code>\</code>, <code>(</code> and <code>)</code></li>
<li>Functions which are marked with a star in the LaTeX3 documentation, plus any arguments these themselves need.</li>
</ul>
<p>That hopefully makes some sense: <code>\int_eval:n</code> is supposed to produce a number, and so what we put in should make sense for turning into a number. The same idea applies to all of the other integer expression functions we saw last time.</p>
<h2>Expansion in our own functions</h2>
<p>Integer expression functions make a good example for expandability, but if that was the only area that expansion applied it would not be that significant. However, there are lots of other places where we want to carry out expansion, and this takes us back to the idea of the argument specification for functions. There are three expansion related argument specifiers: <code>f</code>, <code>o</code> and <code>x</code>. Here, I&#8217;m going to deal just with <code>x</code>-type expansion, and will talk about <code>f</code>- and <code>o</code>-type expansion next time!</p>
<p>So what is <code>x</code>-type expansion? It&#8217;s exhaustive: expanding everything until only non-expandable content remains. We&#8217;ve <a title="Programming LaTeX3: More on token list variables" href="http://www.texdev.net/2012/01/22/programming-latex3-more-on-token-list-variables/">already seen</a> the idea that for example <code>\tl_put_right:NV</code> is related to <code>\tl_put_right:Nn</code>, so that we can access the value of a variable. So it should not be too much of a leap to see a relationship between <code>\tl_set:Nn</code> and <code>\tl_set:Nx</code>. So when we do</p>
<pre>\tl_set:Nn \l_tmpa_tl { foo }
\tl_set:Nn \l_tmpb_tl { \l_tmpa_tl }
\tl_set:Nx \l_tmpc_tl { \l_tmpb_tl }
\tl_show:N \l_tmpc_tl</pre>
<p>TeX exhaustively expands: it expands <code>\l_tmpb_tl</code>, and finds <code>\l_tmpa_tl</code>, then expands <code>\l_tmpa_tl</code> to <code>foo</code>, then stops as letters are not expandable. Inside an <code>x</code>-type expansion, TeX just keeps going! So we don&#8217;t need to know much about the <em>content</em> we are expanding.</p>
<p>With a function such as <code>\int_eval:n</code>, the argument specification is just <code>n</code>, so you might wonder why. The reason is that <code>x</code>-type functions are (almost) always defined as a variant of an <code>n</code>-type parents. So functions that have to expand material (there is no choice) just have an <code>n</code>. (There are also a few things that <code>\int_eval:n</code> will expand that and <code>x</code>-type argument will not, but in general that&#8217;s not an issue as it only shows up if you make a mistake.)</p>
<h2>Functions that can be expanded</h2>
<p>I&#8217;ve said that functions that can be expanded fully are marked with a star in the documentation, but how do you make your own functions that can be expanded? It&#8217;s not too complicated: a function is expandable if it uses only expandable functions. So if all of the functions you use are marked with a star, then yours would be too.</p>
<p>There is a bit more to this, though. We have two (common) ways of creating new functions</p>
<ul>
<li><code>\cs_new:Npn</code></li>
<li><code>\cs_new_protected:Npn</code></li>
</ul>
<p>The difference is expandability. Protected functions are not expandable, whereas ones created with <code>\cs_new:Npn</code> should be. So the rule is to use <code>\cs_new_protected:Npn</code> <em>unless</em> you are sure that your function is expandable.</p>
<h2>LaTeX2e hackers note: What about <code>\protected@edef</code>?</h2>
<p>Experienced TeX hackers will recognise that <code>x</code>-type expansion is build around TeX&#8217;s <code>\edef</code> primitive. If you&#8217;ve worked a lot with LaTeX2e, you&#8217;ll know that with any user input you should use <code>\protected@edef</code>, rather than <code>\edef</code>, so that LaTeX2e robust commands are handled safely.</p>
<p>If you are working with LaTeX2e input, you&#8217;ll still need to use <code>\protected@edef</code> to be safe when expanding arbitrary user input. All LaTeX3 functions are either fully-expandable or engine-protected, so don&#8217;t need the LaTeX2e mechanism, but of course that is not true for LaTeX2e commands.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.texdev.net/2012/04/21/programming-latex3-expandability/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

