X-VM-v5-Data: ([nil nil nil nil nil nil nil nil nil] ["1347" "Mon" "20" "October" "1997" "12:56:39" "-0400" "Matthew Swift" "swift@ALUM.MIT.EDU" nil "29" "Re: \\@ifdefinable" "^Date:" nil nil "10" nil nil nil nil nil] nil) Received: from listserv.gmd.de (listserv.gmd.de [192.88.97.1]) by mail.Uni-Mainz.DE (8.8.5/8.8.5) with ESMTP id SAA31171; Mon, 20 Oct 1997 18:57:05 +0200 (MET DST) Received: from lsv1.listserv.gmd.de by listserv.gmd.de (LSMTP for OpenVMS v1.1a) with SMTP id <8.6A4835D2@listserv.gmd.de>; Mon, 20 Oct 1997 18:57:02 +0200 Received: from RELAY.URZ.UNI-HEIDELBERG.DE by RELAY.URZ.UNI-HEIDELBERG.DE (LISTSERV-TCP/IP release 1.8b) with spool id 218646 for LATEX-L@RELAY.URZ.UNI-HEIDELBERG.DE; Mon, 20 Oct 1997 18:56:52 +0200 Received: from acs-mail.bu.edu (root@ACS-MAIL.BU.EDU [128.197.153.100]) by relay.urz.uni-heidelberg.de (8.8.7/8.8.7) with ESMTP id SAA26687 for ; Mon, 20 Oct 1997 18:56:47 +0200 (MET DST) Received: from aleph.swift.xxx (PPP-94-27.BU.EDU [128.197.9.151]) by acs-mail.bu.edu (8.8.5/BU_Server-1.3) with ESMTP id MAA120234 for ; Mon, 20 Oct 1997 12:56:19 -0400 Received: from aleph (localhost [127.0.0.1]) by aleph.swift.xxx (8.8.5/8.8.5) with ESMTP id MAA00992 for ; Mon, 20 Oct 1997 12:56:39 -0400 X-Emacs: Emacs 20.2, MULE 3.0 (MOMIJINOGA) MIME-Version: 1.0 (generated by SEMI MIME-Edit 0.92 - "Oyanagi") Content-Type: text/plain; charset=US-ASCII Message-ID: <199710201656.MAA00992@aleph.swift.xxx> Reply-To: Mailing list for the LaTeX3 project In-Reply-To: Your message of "Mon, 20 Oct 1997 17:02:16 +0200." Date: Mon, 20 Oct 1997 12:56:39 -0400 From: Matthew Swift Sender: Mailing list for the LaTeX3 project To: Multiple recipients of list LATEX-L Subject: Re: \@ifdefinable Status: R X-Status: X-Keywords: X-UID: 2486 > I get the following variations; all should check \@ifdefinable without > \@ifundefined, but differ in the other respects: > define > new If undefined, then define, else error. > renew If defined, then define, else error. > provide If undefined, then define, else do nothing. > override If define, then define, else do nothing. I don't have an opinion on cleaning up the internals of \@ifdefinable; I have been able to write a large number of defining commands without running into any problems in this regard (the moredefs package). But I would add the following to your list. The first is already in the kernel, the second is in moredefs: check Compare given with existing definition; warn if not identical. require If undefined, define, else check. When considering new defining commands, there are also (at least) four Boolean variations: 1) "robust" or not "robust" 2) \long or not \long 3) \global or not \global 4) advanced syntax that lets you compute the macro name and/or write a complex parameter specification. I've organized and normalized some new defining commands to a small extent in moredefs, but certainly not with the completeness and efficiency that might be achieved by starting from scratch.