Received: from mail.proteosys.com ([213.139.130.197]) by nummer-3.proteosys with Microsoft SMTPSVC(6.0.3790.3959); Fri, 28 Aug 2009 04:58:41 +0200 Received: by mail.proteosys.com (8.14.3/8.14.3) with ESMTP id n7S2wevQ016341 for ; Fri, 28 Aug 2009 04:58:41 +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 n7S2rHN9000905 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Fri, 28 Aug 2009 04:53:17 +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 n7RM2R2A008953; Fri, 28 Aug 2009 04:53:10 +0200 Received: by LISTSERV.UNI-HEIDELBERG.DE (LISTSERV-TCP/IP release 15.5) with spool id 284369 for LATEX-L@LISTSERV.UNI-HEIDELBERG.DE; Fri, 28 Aug 2009 04:53:09 +0200 Received: from relay.uni-heidelberg.de (relay.uni-heidelberg.de [129.206.100.212]) by listserv.uni-heidelberg.de (8.13.1/8.13.1) with ESMTP id n7S2r9wJ031856 for ; Fri, 28 Aug 2009 04:53:09 +0200 Received: from mail-pz0-f172.google.com (mail-pz0-f172.google.com [209.85.222.172]) by relay.uni-heidelberg.de (8.14.1/8.14.1) with ESMTP id n7S2r26P000742 for ; Fri, 28 Aug 2009 04:53:06 +0200 Received: by pzk2 with SMTP id 2so1621946pzk.28 for ; Thu, 27 Aug 2009 19:53:02 -0700 (PDT) Received: by 10.140.201.19 with SMTP id y19mr339452rvf.171.1251427981864; Thu, 27 Aug 2009 19:53:01 -0700 (PDT) Received: from ?129.127.15.244? ([129.127.15.244]) by mx.google.com with ESMTPS id 20sm364816pzk.1.2009.08.27.19.52.59 (version=TLSv1/SSLv3 cipher=RC4-MD5); Thu, 27 Aug 2009 19:53:01 -0700 (PDT) Content-Type: text/plain; charset=UTF-8; format=flowed; delsp=yes Mime-Version: 1.0 (Apple Message framework v935.3) References: ,<4A96EA04.8070306@elzevir.fr> X-Mailer: Apple Mail (2.935.3) X-Spam-Whitelist: Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by listserv.uni-heidelberg.de id n7S2r9wJ031857 Message-ID: Date: Fri, 28 Aug 2009 12:22:57 +0930 Reply-To: Mailing list for the LaTeX3 project Sender: Mailing list for the LaTeX3 project From: Will Robertson Subject: Re: [REQ] "TeX: Rejoining the mainstream" - comments requested To: LATEX-L@LISTSERV.UNI-HEIDELBERG.DE In-Reply-To: Precedence: list List-Help: , List-Unsubscribe: List-Subscribe: List-Owner: List-Archive: X-ProteoSys-SPAM-Score: -6.599 () BAYES_00,RCVD_IN_DNSWL_MED X-Scanned-By: MIMEDefang 2.65 on 213.139.130.197 Return-Path: owner-latex-l@LISTSERV.UNI-HEIDELBERG.DE X-OriginalArrivalTime: 28 Aug 2009 02:58:42.0029 (UTC) FILETIME=[733549D0:01CA278B] Status: R X-Status: X-Keywords: X-UID: 6034 Hi Jonathan, I'm only focussing my comments on two slides: the comparison between LaTeX and Python documentation, and the slide on the LaTeX3 project. * * * I think it's fair to say that tug.org is the place to look for LaTeX documentation: I'm thinking that latex-project would do better simply linking there; in terms of maintenance, it's much better to have a single point of reference. So rather than spending half the slides explaining what latex-project does inadequately, I think you would do better to explain what/how docs.python does and how this would be beneficial for the LaTeX community. And possibly whether there are tools that the LaTeX community could use for this task. The problem, of course, is that Python must have several orders of magnitude more active developers than LaTeX, and man-power for such thankless tasks is extraordinarily thin on the ground for us. * * * Now onto the LaTeX3 slide. Where should I start? :) > ▶ Started in 1993 or so (predates XML, Google, . . . ) > ▶ No-one is using LATEX3 for typesetting LaTeX3 isn't a system to be used for typesetting. At least, not yet. A less contentious way to word this bullet point might be something like "LaTeX3 is a project to continue LaTeX2e past its current status of maintained but not developed." (We've discussed backwards compatibility many times before.) "Current work of the LaTeX3 project is focussing on the transition package authors face in moving from LaTeX2e to the ideas of LaTeX3." (I think that gets the gist across instead of implying that LaTeX3 exists but no-one is using it.) > ▶ Last year, LATEX3 source placed on SVN server, but . . . Actually, it was 2005: > ▶ They say it’s explicitly forbidden to publish LATEX3 code I think you mean "re-distribute the source of the" rather than "publish". You make it sound like we're not allowing people to use the code (which is available on CTAN and through TeX Live/MiKTeX). > ▶ Uses proprietary license (Debian accepted, not OSI-approved) What do you mean by "proprietary" here? The GPL is a proprietary license of the FSF. The Apache Licence is a proprietary license of the Apache Foundation. Neither of those licences are distributed under the terms of themselves. The LPPL solves a real problem in the community: what do we do when authors retire and their packages become no longer maintained but another author wishes to step in? Do you think that Karl, Robin, Jim, Rainer would simply allow me to update someone else's package on CTAN? > ▶ Current activity focused new macro programming interface > > Here’s an example of the old and new interface: > > \def\mymacro #1{\setbox #1\hbox\bgroup} % Old > \cs_new_nopar:Npn \hbox_set_inline_begin:N #1 { % New > \tex_setbox:D #1 \tex_hbox:D \c_group_begin_token } expl3 isn't just about renaming TeX primitives for the sake of it: - toolbox of often-used and otherwise useful functions with consistent (and readable!) names - abstract many expansion control problems with better datatypes As for examples, expl3 has a couple: (from LaTeX2e kernel) From: % \global\expandafter\let % \csname\cf@encoding \string#1\expandafter\endcsname % \csname ?\string#1\endcsname To: % \cs_gset_eq:cc % { \cf@encoding \token_to_str:N #1 } { ? \token_to_str:N #1 } From: % \expandafter % \in@ % \csname sym#3% % \expandafter % \endcsname % \expandafter % {% % \group@list}% % \ifin@ ... \else ... \fi To: % \seq_test_in:cVTF { sym #3 } \l_group_seq {...} {...} Here's another. Consider something completely hypothetical like "if #1 is true and #2 is false, set csname #3 to the value of csname #4" (if you don't think that this is realistic, feel free to come up with another code snippet) \cs_set:Nn \foo_bar:nnnn { \bool_if:nT { #1 && !#2 } { \tl_set:cv {#3} {#4} } } Assuming #1 and #2 are booleans that you'll be able to test with \if, in LaTeX2e you'd end up with something like \def\foo@bar#1#2#3#3{% \if #1 \expandafter \@firstofone \else \expandafter \@gobble \fi {% \if #2 \expandafter \@gobble \else \expandafter \@firstofone \fi {% \expandafter\def \csname #3\expandafter\expandafter\expandafter\endcsname \expandafter\expandafter\expandafter{\csname#4\endcsname}% }% }% } But that's not even quite right, because in the expl3 case you can extract the value from either a toks or a macro without changing the accessor function. Also, sure, you don't need to be so careful about the if-nesting in this case but in expl3 you get it all for free. This is the thing about expl3: we're not really raising the bar on what *can* be written in TeX macros. Rather, we're making it much easier to do so; if you can code a simple algorithm simply, it really doesn't matter if you're using TeX or Lua or Python. In the past, however, it hasn't been as possible to code a simple algorithm simply in TeX macros. > It doesn’t even get named parameters (instead of #1). There's a lot more that qualifies for "doesn't even get" than named parameters. I think it's safe to say that not one macro package has ever failed to be completed because the author had to write ####1 instead of #foobar. As we've previously discussed, I believe that interfaces for keyvals are much more important than whether internal function parameters are named or numbered (since from the *user's* point of view, it doesn't make a shred of difference). Sorry for the lengthy reply, Will