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 o1F08I7k014232 for ; Mon, 15 Feb 2010 01:08:20 +0100 Received: (qmail 27271 invoked by alias); 15 Feb 2010 00:08:13 -0000 Delivered-To: GMX delivery to rainer.schoepf@gmx.net Received: (qmail invoked by alias); 15 Feb 2010 00:08:12 -0000 Received: from relay2.uni-heidelberg.de (EHLO relay2.uni-heidelberg.de) [129.206.210.211] by mx0.gmx.net (mx018) with SMTP; 15 Feb 2010 01:08:12 +0100 Received: from listserv.uni-heidelberg.de (listserv.uni-heidelberg.de [129.206.100.94]) by relay2.uni-heidelberg.de (8.13.8/8.13.8) with ESMTP id o1F05rXB014931 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Mon, 15 Feb 2010 01:05:54 +0100 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 o1EN15pp028587; Mon, 15 Feb 2010 01:05:48 +0100 Received: by LISTSERV.UNI-HEIDELBERG.DE (LISTSERV-TCP/IP release 16.0) with spool id 377458 for LATEX-L@LISTSERV.UNI-HEIDELBERG.DE; Mon, 15 Feb 2010 01:05:48 +0100 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 o1F05mnB001179 for ; Mon, 15 Feb 2010 01:05:48 +0100 Received: from smtp104.plus.mail.re1.yahoo.com (smtp104.plus.mail.re1.yahoo.com [69.147.102.67]) by relay2.uni-heidelberg.de (8.13.8/8.13.8) with SMTP id o1F05cH3014853 for ; Mon, 15 Feb 2010 01:05:38 +0100 Received: (qmail 36814 invoked from network); 15 Feb 2010 00:05:39 -0000 Received: from e181134156.adsl.alicedsl.de (st_philipp@85.181.134.156 with plain) by smtp104.plus.mail.re1.yahoo.com with SMTP; 14 Feb 2010 16:05:38 -0800 PST X-Yahoo-SMTP: _jlT6bOswBCTfNEaYibKorijSw14_bs- X-YMail-OSG: 0_UNxlEVM1mAs5g.vQzU_IBhzoSImZPwt6Vx4j8lRv8J4oeWh.N8.tFCAJoYCZKkOoivRDPyv.CgxZpNzj0FGJAE9XaWD3VQKPBpg.uPFNQTk.2INLbO0GTbQ.s50pJM04x7McV.KYqSICP9PBGInLRCh73.dAwnhyypfRXtVnK5muDnGr7Ms_S0m.syeoJAeZYrLmRMow9maJRpWTpk_MeDqa59QUjyJxfA2pOwXb60VhumV1TRLdUV.jstG_pPKe7QIob6lEwH3_FOHGnQidee68Il3luOsiv10.XMyovwK8V08cWz6L5oJTipsH0n4.2Uebb3dKtFsA._lTBnFWqlfMTbhSyCGYjiYEPyGCZ00k2ZrY_V_n93DtO5tXfuGtoB.uURswtK_qSoSybWU2YtVj.V2ngVGAbKO7EVTm.iP4Jlagu2WmDaCax1LXixt_Y- X-Yahoo-Newman-Property: ymail-3 Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Apple Message framework v1077) X-Mailer: Apple Mail (2.1077) Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by listserv.uni-heidelberg.de id o1F05mnB001180 Message-ID: <6EBBC8A1-0CB0-451D-AF0A-3EF2A41C0B52@YAHOO.DE> Date: Mon, 15 Feb 2010 01:05:36 +0100 Reply-To: Mailing list for the LaTeX3 project Sender: Mailing list for the LaTeX3 project From: Philipp Stephani Subject: Assorted suggestions pt. 1 To: LATEX-L@listserv.uni-heidelberg.de Precedence: list List-Help: , List-Unsubscribe: List-Subscribe: List-Owner: List-Archive: X-GMX-Antispam: 0 (Mail was not recognized as spam); Detail=5D7Q89H36p6i75npGen84eVAEFK/syJmFuaL1OLtauwJ5R/kaZ9HAe8peGX1DeqJYTcon 3bvVAat2VgIIwDvGHk2iJ8SK2vcWsidNyPYmt8ESPp13XqTwgf5/4EvFvCLMwR5OWdde20a6uSpU mTJvQ==V1; X-Resent-By: Forwarder X-Resent-For: rainer.schoepf@gmx.net X-Resent-To: rainer@rainer-schoepf.de X-Scanned-By: MIMEDefang 2.63 on 85.214.41.38 Status: R X-Status: X-Keywords: X-UID: 6270 Hello, some more mostly arbitrary suggestions that I noticed during programming with expl3: - the scratch variables have already been mentioned in another thread. I think that a few scratch variables guaranteed not to be touched by the kernel are useful, if combined with a warning like "The kernel defines the following scratch variables: ... They are guaranteed to never be used by the kernel. However, calling other packages' macros might affect them since they are shared by all packages. So you must not rely on these variables being unaltered when calling macros that are not defined by the kernel. In the latter case, use your own private variables. As an example, a package `foo' might define private scratch variables `\l_foo_tmpa_tl' and so on." - Critical errors: This class of messages lies between errors and fatal errors. They cause the closing of the current input file "at the next moment possible", but don't halt the whole LaTeX run. Errors of this kind (with \endinput) are actually quite common, see the other thread for statistics. - maybe some wrappers around LaTeX-2 conditionals, but that is syntactic sugar - a generalized command checking framework similar to \CheckCommand that works with arbitrary parameter texts and prefixes and can issue messages of arbitrary classes - key-value option processing with l3keys - a string datatype - dedicated stack and queue datatypes that hide their implementation - \exp_arg_unbraced:No === \exp_after:wN - \c_job_name_tl contains the token \tex_jobname:D, not the job name - stack pop operations for every possible combination of local/global stack manipulation and assignment - a local \undefine - the code from memoir.dtx, l. 16880-16933: \cs_new:Nn \maybe_noalign:n { \intexpr_compare:nNnTF { \etex_currentgrouptype:D } = { \c_six } { \mode_if_vertical:TF { \tex_noalign:D { #1 } } { #1 } } { #1 } } (to define macros that can be used between \cr and \noalign) - while I'm reading the code above: perhaps also constants for the \currentgrouptype, \lastnodetype etc., as in etex.sty %% Declare names for `grouptypes' \int_const:Nn \c_group_bottomlevel { 0 } % for the outside world \int_const:Nn \c_group_simple { 1 } % for local structure only \int_const:Nn \c_group_hbox { 2 } % for `\hbox{}' \int_const:Nn \c_group_adjustedhbox { 3 } % for `\hbox{}' in vertical mode \int_const:Nn \c_group_vbox { 4 } % for `\vbox{}' \int_const:Nn \c_group_vtop { 5 } % for `\vtop{}' \int_const:Nn \c_group_align { 6 } % for `\halign{}', `\valign{}' \int_const:Nn \c_group_noalign { 7 } % for `\noalign{}' \int_const:Nn \c_group_output { 8 } % for output routine \int_const:Nn \c_group_math { 9 } % for, e.g, `^{}' \int_const:Nn \c_group_disc { 10 } % for `\discretionary{}{}{}' \int_const:Nn \c_group_insert { 11 } % for `\insert{}', `\vadjust{}' \int_const:Nn \c_group_vcenter { 12 } % for `\vcenter{}' \int_const:Nn \c_group_mathchoice { 13 } % for `\mathchoice{}{}{}{}' \int_const:Nn \c_group_semisimple { 14 } % for `\begingroup...\endgroup' \int_const:Nn \c_group_mathshift { 15 } % for `$...$' \int_const:Nn \c_group_mathleft { 16 } % for `\left...\right' \int_const:Nn \c_interaction_batch { 0 } % omits all stops and omits terminal output \int_const:Nn \c_interaction_nonstop { 1 } % omits all stops \int_const:Nn \c_interaction_scroll { 2 } % omits error stops \int_const:Nn \c_interaction_errorstop { 3 } % stops at every opportunity to interact %% Declare names for `nodetypes' \int_const:Nn \c_node_char { 0 } % character nodes \int_const:Nn \c_node_hlist { 1 } % hlist nodes \int_const:Nn \c_node_vlist { 2 } % vlist nodes \int_const:Nn \c_node_rule { 3 } % rule nodes \int_const:Nn \c_node_ins { 4 } % insertion nodes \int_const:Nn \c_node_mark { 5 } % a mark node \int_const:Nn \c_node_adjust { 6 } % an adjust node \int_const:Nn \c_node_ligature { 7 } % a ligature node \int_const:Nn \c_node_disc { 8 } % a discretionary node \int_const:Nn \c_node_whatsit { 9 } % special extension nodes \int_const:Nn \c_node_math { 10 } % a math node \int_const:Nn \c_node_glue { 11 } % node that points to a glue specification \int_const:Nn \c_node_kern { 12 } % a kern node \int_const:Nn \c_node_penalty { 13 } % a penalty node \int_const:Nn \c_node_unset { 14 } % an unset node \int_const:Nn \c_node_maths { 15 } % nodes that occur only in maths mode %% Declare names for `iftypes' \int_const:Nn \c_if_char { 1 } % \if \int_const:Nn \c_if_cat { 2 } % \ifcat \int_const:Nn \c_if_num { 3 } % \ifnum \int_const:Nn \c_if_dim { 4 } % \ifdim \int_const:Nn \c_if_odd { 5 } % \ifodd \int_const:Nn \c_if_vmode { 6 } % \ifvmode \int_const:Nn \c_if_hmode { 7 } % \ifhmode \int_const:Nn \c_if_mmode { 8 } % \ifmmode \int_const:Nn \c_if_inner { 9 } % \ifinner \int_const:Nn \c_if_void { 10 } % \ifvoid \int_const:Nn \c_if_hbox { 11 } % \ifhbox \int_const:Nn \c_if_vbox { 12 } % \ifvbox \int_const:Nn \c_if_x { 13 } % \ifx \int_const:Nn \c_if_eof { 14 } % \ifeof \int_const:Nn \c_if_true { 15 } % \iftrue \int_const:Nn \c_if_false { 16 } % \iffalse \int_const:Nn \c_if_case { 17 } % \ifcase \int_const:Nn \c_if_defined { 18 } % \ifdefined \int_const:Nn \c_if_csname { 19 } % \ifcsname \int_const:Nn \c_if_fontchar { 20 } % \iffontchar - \chk_if_free_cs, but with an arbitrary message class Those are just some random ideas, but perhaps some of them are helpful.