Recently, I've decided it would be a useful and interesting skill to be able to program LaTeX classes, macros etc, and so had a look around about what resources existed (this question was very helpful). However on the way, I was reminded about the ongoing LaTeX3 project, and ended up looking into this, thus leading to my discovery of expl3
, which as far as I can tell is going to form the 'programming layer' of LaTeX3 when it is released.
This then raised the question: is it worth trying to come to grips with the mishmash of languages and commands which constitute the current LaTeX source/package/class etc coding, and thus have the advantage of working with something fundamentally designed around LaTeX2e, with which I imagine I'll remain working for the time being, or should I just focus my efforts on learning expl3
?
The latter seems to me to be the better option, given that in the future (we hope) it is going to be the only language of which knowledge is required or indeed useful; as well as this it certainly seems easier to learn just expl3
than to try and come to grips with the multiple facets of LaTeX2e programming which currently exist (as laid out well here).
My sole hesitation then (asides from the daunting task of learning the thing - I am finding comprehensive documentation hard to come by, however I am aware this is something the LaTeX3 project is aiming to solve, so am hopeful for the future), is that when using my knowledge in LaTeX2e-based documents, I may find myself limited in that I am using a language which is not 'fundamental' to the system. I know expl3
currently exists as a package, which is how I would implement my knowledge (if needed), but I was wondering (perhaps this should be split into a separate question?) whether there is anything coding-wise (or anything else for that matter) which I might wish to do in LaTeX (coding a document class to creating a fancy macro) for which expl3
would be insufficient or too unwieldy to realistically be implementable?
On a side note, would people recommend familiarity with other (better-documented) programming languages before attempting to learn either expl3
or the alternative? I worry that I am throwing myself somewhat in the deep end here, as whilst my knowledge of LateX is decent, I have encountered little programming so far in my digital life.
I know there are about three different questions in one here, and if they should be split up I am more than willing to edit them out and repost elsewhere.
As always, any help at all is appreciated greatly :)
P.s. On the note of expl3
resources, I have found this and this, both of which look promising.
expl3
content) are written usingLaTeX2e
, so knowledge inexpl3
does not help much. More advanced packages likesunitx
,xpatch
,tasks
etc. useexpl3
to extend LaTeX2e (as of now); But in general, I find this question is too broadLaTeX2e
first.expl3
might be a tolerably sane way to write macros (much better than the alternative), there's much more complexity to doing things with LaTeX (writing documentclasses etc.) than just the programming language. I really think this is the wrong question to ask. (For example, Adobe Photoshop might have been original written in Pascal and later in C++, but neither learning Pascal nor C++ will make you better at using Photoshop.) I elaborated a bit on related matters in this answer so not typing it all again.graphicx
? Even if you plan for your class to redefine every macro in the LaTeX format, you need to know something about how they work in order to not end up with something which violates user expectations too violently. And that's not to mention the underlying TeX layer. How long do you want to wait before you can actually use your code?