What practices are there regarding the use or avoidance of "internal" TeX or LaTeX commands? (About "command" vs "macro", there is some discussion in this TeX.SX answer, though I don't know whether this is the last word.)
The Guide to LaTeX (4th ed.) writes this (D.1.3, pp. 429-430):
[P]rimitive TeX commands [should] be shunned[.] [...] [That] primitive TeX commands might be removed from a future LaTeX version [...] is not really the point. [...] In spite of the desirability of employing only official LaTeX commands, there are many occasions when either the internal LaTeX commands or the TeX primitives just must be used. The risk of future incompatibility must be taken in order to have a workable package now. However, one should not take this risk lightly where a high-level equivalent is available.
In D.1.2 (pp. 427-429) it writes
A question that confronts LaTeX programmers is to what extent the internal LaTeX commands may be used in class and package files. There is always a danger that such commands may vanish in later versions, since they have never been documented in the official books [...].
and also distinguishes between different "levels" of commands: user commands, class and package commands, internal LaTeX commands, low-level TeX commands, internal private commands. (Again, this might not be the last word on the matter.)
- Which internal TeX commands should be avoided? For example, people universally agree that
\chooseare superseded by
\binom, respectively, and that
\aboveshould be equally avoided (use
- Which internal LaTeX commands should be avoided?
- Which internal TeX commands can be considered widely used and unavoidable for the non-casual user?
- Which internal LaTeX commands can be considered widely used and unavoidable for the non-casual user?
What is an "internal" command anyway? This concept seems to be rough around the edges for (La)TeX, especially with some package documentations encouraging the programmer to redefine "internal" commands for certain purposes. I think that avoidance of "internal" commands is also a matter of programming style (and of how pure and principled one wants to be). One view is that internal commands are those marked by an
@, though the Guide to LaTeX's typology of commands (mentioned above) is finer-grained.
For example, experienced user egreg
who has, this very day of 2013-Jul-11 UTC, surpassed the 200k mark for TeX.SX rep :-)
writes that "in documents"
\break should be avoided whereas "in lower level programming" they're okay. But it's not like every command definition is lower-level programming. Which internals are more widely used, and which are taboo? If people use
\patchcmd (which violates the programming principle of encapsulation/abstraction as much as is imaginable), it seems like nothing is off-limits.