26,572 reputation
277146
bio website users.aims.ac.za/~bruno
location France
age 23
visits member for 3 years, 3 months
seen 2 days ago

I've been using LaTeX more and more in the past nine years, initially typesetting solutions to maths problems, later taking notes in class for more than a year.

A few months back I had some ideas about writing a package. I was (un?)fortunate enough to find a copy of the TeXbook in my school's library. Since then, I have been hooked by the strange style of programming that TeX macros provide.

This has led me to become a member of the LaTeX3 team in May 2011. This was an exciting time to join the project: the team improved consistency of the expl3 language provided by l3kernel considerably, and we have seen people starting to code in the language. I have focussed in making the l3kernel code as fast and bullet-proof as possible (two often conflicting aims).

Current LaTeX projects:

  • Get l3fp to reach full IEEE-754 (2008) compliance. This module, which I am quite proud of, lets us parse expandably floating point expressions, in a way similar to eTeX's \the\numexpr...\relax for integers. The main missing parts are signalling NaNs and subnormal numbers, as well as providing functions to control the rounding mode.

  • Enrich l3fp with more functions, such as atan.

  • Clean up l3regex, the LaTeX3 regular expression engine, marking it as stable. In particular, add functions to act on a file, sed-like.

  • Write a PEG parser operating on strings. This could in principle be done expandably, but I am not yet sure whether it is necessarily useful.

  • Write a C compiler (this is not for LaTeX3, mostly to learn how compilers work). Having a full C-to-TeX compiler would immediately provide access to many other languages from TeX, since many compilers are written in C. Of course, the code would run rather slowly, and much slower than using LuaTeX.

  • Enable TeX to produce text output instead of pdf. This could be done either by using LuaTeX, or by modifying an engine, or by emulating TeX within TeX (which I have partly done).

  • Help with debugging macros either by providing a graphical interface to visualize expansion, or (easier, and partly done) by performing steps of expansion or assignments one by one and showing partial results with \typeout within TeX.

  • Understand how to best generalize LaTeX3's \tl_expandable_lowercase:n to do more general token-list transformations expandably. This might combine with the idea of a parser.

  • Perform partial macro expansion in a file, which would distinguish between user-defined macros and macros defined in a package.

  • Write an os-independent Makefile-like Lua program.

  • A few dormant packages, including the one that brought me to the TeX path two years ago.


1d
awarded  Good Answer
1d
awarded  Nice Answer
Apr
9
awarded  Nice Answer
Apr
9
awarded  Popular Question
Apr
3
comment How can I combine \seq_use:Nn and \seq_map_inline:Nn?
It's a problem of expandability. \seq_map_inline:Nn is not expandable. You can use \seq_map_function:NN after defining a (non-protected) function which does \multicolumn{...}{...}{#1}.
Apr
1
revised How to prolong compilation time while engaging in leisure activities?
Mention xint is faster than bigintcalc.
Mar
26
answered Code-trolling/prank questions for TeX.SX?
Mar
20
awarded  Guru
Mar
19
comment Expandable, standard TeX only way to compare balanced token lists
@jfbu: I repeat, the "active & let to &" and the "standard &" are indistinguishable through any expandable means, including \ifcat, \meaning, and \string.
Mar
19
comment Expandable, standard TeX only way to compare balanced token lists
@alexsh: what you are asking for is impossible, as there is no expandable way of distinguishing the normal-catcode & from the active token & after the definitions \catcode126=13\let~=&\catcode38=13\let&=~ (in other words, after the active & is let to an implicit &). This of course is not specific to &. The same problem arises after \let\X=X \escapechar=-1: \X and X are not distinguishable expandably.
Mar
12
comment Test whether token list is empty
As far as I can tell without testing, your second comment is correct: to make the macro useable inside alignments, one should write \ifcase1\expandafter}\expandafter}\expandafter\fi.
Mar
12
comment Test whether token list is empty
@alexsh The two \expandafter you suggest adding would do nothing. When TeX looks for a number after \ifcase, it reads the next two tokens, which denote the character code of }. It turns out that such a number can be followed by an optional space token, so TeX continues expanding what follows (namely \expandafter}\expandafter...) before using the number (character code of }) as the argument of \ifcase.
Mar
5
comment Changing style of Proof
@Max Sorry for the delay in fixing that. My fix is ugly but should now work.
Mar
5
revised Changing style of Proof
The mechanism for LaTeX's `\protect` hides the actual macro as \\proof, not \proof.
Feb
17
comment Experimenting with l3box and l3skip's dim variables
At the start of the parbox, TeX is in vertical mode. In this mode, it will stack boxes vertically, and in particular the (horizontal) box created by \hbox_overlap_left:n is placed entirely above the paragraph of text which follows. Add \leavevmode before \hbox_overlap_left:n to go to horizontal mode: then the bullet and the following text will be considered as a single paragraph.
Feb
12
comment Modest changes in LaTeX dialect possible?
Everything you describe is pretty straightforward. For an example of what can be done, the xmltex package lets you insert xml into a TeX file and typeset the <div>...</div> and other things correctly.
Feb
7
comment Placing equation number on left with reqno option in amsart document class
@gofvonx I've updated with a full example. I had forgotten to mention the need for \makeatletter and \makeother when one works with commands whose name contains @.
Feb
7
revised Placing equation number on left with reqno option in amsart document class
Put MWE, don't forget makeatletter/other
Feb
7
comment Sorting swedish index with makeidx correctly
@UlrikeFischer The correct approach (besides switching to a more modern tool for indexes) would be to parse the argument of \index. Do you know of a full description of the syntax?
Feb
6
awarded  Nice Answer