Received: from mx0.gmx.net (mx0.gmx.net [213.165.64.100]) by h1439878.stratoserver.net (8.14.2/8.14.2/Debian-2build1) with SMTP id p81CAW77029890 for ; Thu, 1 Sep 2011 14:10:34 +0200 Received: (qmail 16599 invoked by alias); 1 Sep 2011 12:10:27 -0000 Delivered-To: GMX delivery to rainer.schoepf@gmx.net Received: (qmail invoked by alias); 01 Sep 2011 12:10:26 -0000 Received: from relay.uni-heidelberg.de (EHLO relay.uni-heidelberg.de) [129.206.100.212] by mx0.gmx.net (mx111) with SMTP; 01 Sep 2011 14:10:26 +0200 Received: from listserv.uni-heidelberg.de (listserv.uni-heidelberg.de [129.206.100.94]) by relay.uni-heidelberg.de (8.14.1/8.14.1) with ESMTP id p81C8GFA024291 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 1 Sep 2011 14:08:16 +0200 Received: from listserv.uni-heidelberg.de (localhost.localdomain [127.0.0.1]) by listserv.uni-heidelberg.de (8.13.1/8.13.1) with ESMTP id p81B5g0F021245; Thu, 1 Sep 2011 14:08:15 +0200 Received: by LISTSERV.UNI-HEIDELBERG.DE (LISTSERV-TCP/IP release 16.0) with spool id 1626699 for LATEX-L@LISTSERV.UNI-HEIDELBERG.DE; Thu, 1 Sep 2011 14:08:15 +0200 Received: from relay2.uni-heidelberg.de (relay2.uni-heidelberg.de [129.206.210.211]) by listserv.uni-heidelberg.de (8.13.1/8.13.1) with ESMTP id p81C8Ftk009249 for ; Thu, 1 Sep 2011 14:08:15 +0200 Received: from ueamailgate01.uea.ac.uk (ueamailgate01.uea.ac.uk [139.222.131.184]) by relay2.uni-heidelberg.de (8.13.8/8.13.8) with ESMTP id p81C838P025142 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Thu, 1 Sep 2011 14:08:07 +0200 Received: from ueams01.uea.ac.uk (ueams01.uea.ac.uk [139.222.131.78]) by ueamailgate01.uea.ac.uk (8.13.8/8.13.8) with ESMTP id p81C8294004927 for ; Thu, 1 Sep 2011 13:08:02 +0100 Received: from [139.222.112.80] by ueams01.uea.ac.uk with esmtp (Exim 4.69) (envelope-from ) id 1Qz618-0003i4-25 for LATEX-L@LISTSERV.UNI-HEIDELBERG.DE; Thu, 01 Sep 2011 13:05:10 +0100 User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:6.0.1) Gecko/20110830 Thunderbird/6.0.1 MIME-Version: 1.0 References: <1rb2vdciob67d$.dlg@nililand.de> X-Enigmail-Version: 1.3.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Bayes-Prob: 0.9348 (Score 4, tokens from: @@RPTN, outgoing) X-CanIt-Geo: ip=139.222.131.78; country=GB; region=I9; city=Norwich; latitude=52.6333; longitude=1.3000; http://maps.google.com/maps?q=52.6333,1.3000&z=6 X-CanItPRO-Stream: UEA:outgoing (inherits from UEA:default,base:default) X-Canit-Stats-ID: 05Fro82cE - 112a42eb79f9 - 20110901 X-Scanned-By: CanIt (www . roaringpenguin . com) on 139.222.131.184 Message-ID: <4E5F75C0.8030105@morningstar2.co.uk> Date: Thu, 1 Sep 2011 13:08:32 +0100 Reply-To: Mailing list for the LaTeX3 project Sender: Mailing list for the LaTeX3 project From: Joseph Wright Subject: Re: Internal equivalent of \providecommand? To: LATEX-L@listserv.uni-heidelberg.de In-Reply-To: <1rb2vdciob67d$.dlg@nililand.de> Precedence: list List-Help: , List-Unsubscribe: List-Subscribe: List-Owner: List-Archive: X-GMX-Antispam: 0 (Sender is in whitelist: joseph.wright@MORNINGSTAR2.CO.UK); Detail=5D7Q89H36p4L00VTXC6D4q0N+AH0PUCnBi0P5cROEGjO+pG7NAH/K+tf9SrVFtpLrKONl 2T9EL4W4U4jgzLbnCcGpk1z/zwmKT/K1fv3lD0=V1; X-Resent-By: Forwarder X-Resent-For: rainer.schoepf@gmx.net X-Resent-To: rainer@rainer-schoepf.de Status: R X-Status: X-Keywords: X-UID: 6853 On 01/09/2011 11:57, Ulrike Fischer wrote: > Is there an expl3 equivalent for a \providecommand? > > I could do > > \cs_if_free:NT \mycommand {\cs_set:Npn \mycommand {...}} > > but I don't find it very elegant to have to type \mycommand twice. At the code level, the answer is 'no'. Within a module, we'd expect all functions to be well-defined: if they 'might' be needed, they should exist. (See for example the fact that a lot of internal aux functions are created simply to mark the name as taken.) At the document level, there is \ProvideDocumentCommand, but even there I'd hope that this will not be used very often. Well-designed interfaces should provide a precise set of functions. Now, there is the reality that LaTeX2e stuff is often not so well-designed and does sometime rely on 'might exist' functions. There, I'm afraid the construct you've pointed to is the way to go. -- Joseph Wright