Didier Verna's scientific blog: Lisp, Emacs, LaTeX and random stuff.

## LaTeX

Sunday, March 5 2017

## FiXme 4.4 is out

I'm pleased to announce the release of FiXme 4.4 (my collaborative annotation tool for LaTeX).

New in this release:

** Handle existing yet empty lox files properly
meaning, don't actually typeset an empty list of corrections.
** Don't update the lox file in final mode
avoiding potential typesetting artifacts, reported by Lars Madsen.
** Various internals and documentation improvements.


Get it at the usual place.

Thursday, January 26 2017

## DoX 2.3 is out

I'm pleased to announce the release of DoX 2.3 (Extensions to the Doc pakcage for LaTeX).

New in this release:

** Support Doc's internal \saved@indexname command
thanks to Falk Hanisch.


Get it at the usual place.

Wednesday, January 18 2017

## FiXme 4.3 is out

I'm pleased to announce the release of FiXme 4.3 (my collaborative annotation tool for LaTeX), after more than 3 years of hyper-sleep.

New in this release:

** Add a paragraph about the duplication of notes in captions
upon exchange with Kreuvf.
** Update support for the KOMA-Script classes to the tocbasic interface
reported by Dirk Surmann.
** Separate inline notes from the text they follow
suggested by Victor Porton.
** Fix potential inline layouts color leakage
reported by Victor Porton.
** Fix several bracket parsing problems
thanks to Joseph Wright and Lars Madsen.


Get it at the usual place.

Monday, January 28 2013

## FiXme 4.2 is out

I'm pleased to announce that, after more than two years, I've managed to put up a very small release of FiXme (my collaborative annotations tool for LaTeX2e) in which I didn't even author the two included changes...

Keep the faith. FiXme is still alive !

New in this veresion (4.2):

** Improve Danish translation
** Fix buglet in redefinition of \@wrindex
reported by Norman Gray.


Get it at the usual place.

Wednesday, March 21 2012

## Star TeX, the Next Generation

I'm happy to announce that my contribution to TUG 2012, the next TeX Users Group International conference, has been accepted. Please find the title and abstract below.

Star TeX, the Next Generation

In 2010, I asked Donald Knuth why he chose to design and implement TeX as a macro-expansion system (as opposed to more traditional procedure calls). His answer was that:

1. he wanted something relatively simple for his secretary who was not a computer scientist,
2. the very limited computing resources at that time practically mandated the use of something much lighter than a true programming language.

The first part of the answer left me with a slight feeling of skepticism. It remains to be seen that TeX is simple to use, and when or where it is, its underlying implementation has hardly anything to do with it.

The second part of the answer, on the other hand, was both very convincing and arguably now obsolete as well. Time has passed and the situation today is very different from what it was 50 years ago. The available computing power has grown exponentially, and so has our overall skills in language design and implementation.

Several ideas on how to modernize TeX already exist. Some have been actually implemented. In this talk, I will present mine. Interestingly enough, it seems to me that modernizing TeX can start with grounding it in an old yet very modern programming language: Common Lisp. I will present the key features that make this language particularly well suited to the task, emphasizing on points such as extensibility, scriptability and multi-paradigm programming. The presentation will include reflections about the software engineering aspects (internals), as well as about the surface layer of TeX itself. Most notably, I will explore the possibilities of providing a more consistent syntax to the TeX API, while maintaining backward compatibility with the existing code base.

Tuesday, July 19 2011

## LaTeX Coding Standards

EDIT: the paper is now freely available for non TUG members.

I'm happy to announce that my contribution to TUG 2011, the next TeX Users Group International conference, has been accepted. Please find the title and abstract below.

Towards LaTeX Coding Standards

Because LaTeX (and ultimately TeX) is only a macro-expansion system, the language does not impose any kind of good software engineering practice, program structure or coding style whatsoever. As a consequence, writing beautiful code (for some definition of "beautiful") requires a lot of self-discipline from the programmer.

Maybe because in the LaTeX world, collaboration is not so widespread (most packages are single-authored), the idea of some LaTeX Coding Standards is not so pressing as with other programming languages. Some people may, and probably have developed their own programming habits, but when it comes to the LaTeX world as a whole, the situation is close to anarchy.

Over the years, the permanent flow of personal development experiences contributed to shape my own taste in terms of coding style. The issues involved are numerous and their spectrum is very large: they range from simple code layout (formatting, indentation, naming schemes etc.), mid-level concerns such as modularity and encapsulation, to very high-level concerns like package interaction/conflict management and even some rules for proper social behavior.

In this talk, I will report on all these experiences and describe what I think are good (or at least better) programming practices. I believe that such practices do help in terms of code readability, maintainability and extensibility, all key factors in software evolution. They help me, perhaps they will help you too.

Thursday, December 16 2010

## DoX 2.2 is released

Hello, I'm happy to announce the release of DoX v2.2. DoX is a set of extensions to the Doc package, for LaTeX2e class and style authors.

New in this release: the ability to create new control-sequence based documentation items (for instance LaTeX lengths).

Tuesday, December 14 2010

## CurVe 1.16 is out

Hello,

I'm happy to announce the release of CurVe 1.16. CurVe is a CV class for LaTeX2e.

New in this release:

- An examples directory
- New \text macro to insert plain text in the middle of rubrics,
- Support for openbib option which was implicit before
- Fix incompatibilities with the splitbib package
- Handle the bibentry/hyperref incompatibility directly
- Implement old font commands letting packages using them (e.g. fancyhdr) work correctly

Friday, December 3 2010

## FiNK 2.2 is out

Hello,

I'm happy to announce the release of FiNK 2.2. FiNK is the LaTeX2e File Name Keeper. New in this release: FiNK is now compatible with the memoir class.

Grab it here

Wednesday, December 1 2010

## Nice feedback on my TUG 2010 paper

Here's a nice comment from a reader of the TUGBoat on my TUG 2010 paper entitled "Classes, Styles, Conflicts: the Biological Realm of LaTeX":

I really enjoy Didier Verna's paper (pp. 162-172). His analogies between LaTeX and microbiology is truly exciting! Being neither a TeXnician nor a (micro) biologist, the paper gives me more insight about LaTeX while at the same time giving me a glimpse to a world beyond my narrow field of knowledge. Please do extend my compliments to the author.

Tuesday, October 5 2010

## Classes, Styles, Conflicts: the Biological Realm of LaTeX

I'm pleased to announce that my article entitled "Classes, Styles, Conflicts: the Biological Realm of LaTeX" has been published in the TUGboat journal, Volume 32 N.2.

There is also a live video recording of the presentation. See http://www.lrde.epita.fr/~didier/resear ... rna.10.tug

Tuesday, March 9 2010

## Paper accepted at TUG 2010

Hello,

I'm happy to announce that I will be presenting a paper at TUG 2010, in San Francisco, for the 2^5th birthday of TeX. The abstract is given below:

Classes, Styles, Conflicts: the Biological Realm of LaTeX

Every LaTeX user faces the "compatibility nightmare" one day or another. With so much intercession capabilities at hand (LaTeX code being able to redefine itself at will), a time comes inevitably when the compilation of a document fails, due to a class/style conflict. In an ideal world, class/style conflicts should only be a concern for package maintainers, not end-users of LaTeX. Unfortunately, the world is real, not ideal, and end-user document compilation does break.

As both a class/style maintainer and a document author, I tried several times to come up with some general principles or a systematic approach to handling class/style cross-compatibility in a smooth and gentle manner, but I ultimately failed. Instead, one Monday morning, I woke up with this vision of the LaTeX biotope, an emergent phenomenon whose global behavior cannot be comprehended, because it is in fact the result of a myriad of "macro"-interactions between small entities, themselves in perpetual evolution.

In this presentation, I would like to draw bridges between LaTeX and biology, by viewing documents, classes and styles as living beings constantly mutating their geneTeX code in order to survive \renewcommand attacks...

Monday, September 21 2009

## FiXme 4.0 is out !

I'm happy to announce FiXme version 4.0

#### WARNING: this is a major release containing many new features and heavy
#### internals refactoring. FiXme 4.0 comes with unprecedented flexibiity,
#### unrivalled extensibility and unchallenged backward-INcompatibility.

What's new in version 4.0
=========================
* Support for collaborative annotations
suggested by Michael Kubovy
** Support for "targeted" notes and environments
(highlighting a portion of text), suggested by Mark Edgington.
** Support for "floating" notes
(not specific to any portion of text), suggested by Rasmus Villemoes.
** Support for alternate layout autoswitch in TeX's inner mode
suggested by Will Robertson.
** Support for automatic language tracking in multilingual documents
** Support for themes
** Extended support for user-provided layouts
** Support for key=value argument syntax in the whole user interface
** New command \fxsetup
** Homogenize log and console messages
** Heavy internals refactoring

Description
===========
FiXme is a collaborative annotation tool for LaTeX documents. Annotating a
document refers here to inserting meta-notes, that is, notes that do not
belong to the document itself, but rather to its development or reviewing
process. Such notes may involve things of different importance levels, ranging
from simple "fix the spelling" flags to critical "this paragraph is a lie"
mentions. Annotations like this should be visible during the development or
reviewing phase, but should normally disapear in the final version of the
document.

FiXme is designed to ease and automate the process of managing collaborative
annotations, by offering a set of predefined note levels and layouts, the
possibility to register multiple note authors, to reference annotations by
listing and indexing etc. FiXme is extensible, giving you the possibility to
create new layouts or even complete "themes", and also comes with support for
AUC-TeX.

FiXme homepage: http://www.lrde.epita.fr/~didier/softwa ... .php#fixme

## DoX v2.0 (2009/09/21) is out

I'm happy to announce the release of DoX v2.0 (2009/09/21).

New in this version:
* Optional argument to \doxitem idxtype option to change the item's index type

* Optional argument to \Describe<Item> and the <Item> environment
noprint option to avoid marginal printing
noindex option to avoid item indexing

* Extend \DescribeMacro, \DescribeEnv and their corresponding environments with the same features

The doc package provides LaTeX developers with means to describe the usage and the definition of new commands and environments. However, there is no simple way to extend this functionality to other items (options or counters for instance). DoX is designed to circumvent this limitation, and provides some improvements over the existing functionality as well.

Monday, September 14 2009

## DoX version 1.0 (2009/09/11) is now available

I'm happy to annouce the first public version of the DoX package for LaTeX2e.

The doc package provides LaTeX developers with means to describe the usage and the definition of new macros and environments. However, there is no simple way to extend this functionality to other items (options or counters for instance). The dox package is designed to circumvent this limitation.

Wednesday, July 22 2009

## FiXme 3.4 is out

I'm happy to announce the next edition of FiXme: version 3.4

New in this release:
** \fixme, \fxerror, \fxwarning and \fxnote are now robust
** Fix incompatibility with KOMA-Script classes when the lox file is inexistent

FiXme provides you with a way of inserting fixme notes in documents. Such notes can appear in the margin of the document, as index entries, in the log file and as warnings on stdout. It is also possible to summarize them in a list, and in the index. When you switch from draft to final mode, any remaining fixme note will be logged, but removed from the document's body. Additionally, critical notes will abort compilation with an informative message. FiXme also comes with support for AUC-TeX.

Wednesday, June 4 2008

## Beamer blocks and the Listings package

For many of my lectures, I use the Listings package for typesetting code excerpts, and include them in Beamer blocks. Providing nice shortcuts for doing that is not trivial if you want to preserve control over Listings options, and add a new one for the block's title. Here is a way to nicely wrap a call to \lstinputlisting inside a Beamer block.

First, let's use the xkeyval package to create a "title" option:
\define@cmdkey[dvl]{lst}[@dvl@lst@]{title}{}

Next, a low-level listing input command. This macro takes 4 arguments: an overlay specification, a title for the block, a list of options passed to Listings, and a file name for input:
%% \dvlinputlisting{overlay}{title}{lstoption=,...}{file}\newcommand\dvlinputlisting[4]{%  \begin{block}#1{#2}    %% #### WARNING: I need this hack because keyval-style options    %% mess up the parsing.    \expandafter\lstinputlisting\expandafter[#3]{#4}  \end{block}}

And now, you can define all sorts of specialized versions for different languages. For example, here is one for Common Lisp code. The block title is "Lisp" by default, and a "lisp" extension is automatically added to the file name:
%% Language-specific shortcuts:%% The title option is used for the beamer block's title.%% All other options are passed to listings.%% \XXXinputlisting<overlay>[title=,lstoption=,...]{file}\newcommand<>\clinputlisting[2][]{%  \def\@dvl@lst@title{Lisp}%  \setkeys*[dvl]{lst}{#1}%  \edef\@dvl@lst@options{language=lisp,\XKV@rm}%  \dvlinputlisting{#3}{\@dvl@lst@title}{\@dvl@lst@options}{#2.lisp}}

Which you could call like this:
\clinputlisting<2->[title={Example 1}, gobble=2]{ex1}

As you can see, "title" is an option for the Beamer block, and all the others are dispatched to Listings. Cool.

Now, things are getting more complicated when you want nice shortcuts for inline environments, because nesting Beamer blocks with listings doesn't work. Fortunately, I figured out a trick based on the Verbatim package to simulate that. The idea is to store the contents of the listing environment in a temporary file, and use \lstinputlisting as before to include it. Clever right ?
:-)
Here is a generic environment for doing that. In the opening, we read the environment's contents and store it in the file \jobname.dvl. In the ending, we call our previous macro \dvlinputlisting on that file (actually, on a dynamically created argument list called \@dvl@args:
\usepackage{verbatim}\newwrite\lstvrb@out\def\@dvllisting{%  \begingroup  \@bsphack  \immediate\openout\lstvrb@out\jobname.dvl  \let\do\@makeother\dospecials\catcode\^^M\active  \def\verbatim@processline{%    \immediate\write\lstvrb@out{\the\verbatim@line}}%  \verbatim@start}\def\@enddvllisting{%  \immediate\closeout\lstvrb@out  \@esphack  \endgroup  \expandafter\dvlinputlisting\@dvl@args}

And now, we can define all sorts of specialized versions for every language we're insterested in. Again, here is one for Common Lisp.
\newenvironment<>{cllisting}[1][]{%  \def\@dvl@lst@title{Lisp}%  \setkeys*[dvl]{lst}{#1}%  \edef\@dvl@lst@options{language=lisp,\XKV@rm}%  \xdef\@dvl@args{{#2}{\@dvl@lst@title}{\@dvl@lst@options}{%    \jobname.dvl}}  \@dvllisting}{%  \@enddvllisting}

Which you can use like this:
\begin{cllinsting}<2->[title={Example 1},gobble=2]  (defun foo (x) (* 2 x))\end{cllisting}`

Don't forget that frames containing code excerpts like this are fragile!

Wednesday, February 27 2008

## FiNK 2.1.1 is released

I'm happy to announce the release of FiNK 2.1.1. This is a bugfix/documentation only release.

FiNK is a LaTeX2e package that keeps track of the files included (\input or \include) in your documents.

What's new in this version:
** Fix trailing whitespace in \fink@restore

Monday, February 25 2008

## CurVe 1.15 is out

I'm happy to announce the next edition of CurVe, a LaTeX2e class for writing curricula vitae.

What's new in this version:
** Support for itemize environments, suggested by Mirko Hessel-von Molo.
** Added some documentation about vertical spacing problems in |bbl| files, suggested by Seweryn Habdank-Wojewódzki.

Wednesday, November 28 2007

## FiXme version 3.3 is out

I'm happy to announce the next edition of FiXme: version 3.3

New in this release:
* Document incompatibility between marginal layout and the ACM SIG classes
* Honor twoside option in marginal layout
* Support KOMA-Script classes version 2006/07/30 v2.95b
* Documentation improvements
* Fix incompatibility with AMS-Art
* Fix bug in \fixme@footnotetrue

FiXme provides you with a way of inserting fixme notes in documents. Such notes can appear in the margin of the document, as index entries, in the log file and as warnings on stdout. It is also possible to summarize them in a list, and in the index. When you switch from draft to final mode, any remaining fixme note will be logged, but removed from the document's body. Additionally, critical notes will abort compilation with an informative message. FiXme also comes with support for AUC-TeX.

- page 1 of 2

Copyright (C) 2008 -- 2013 Didier Verna didier@lrde.epita.fr