Return-Path: Delivered-To: rainer Received: from h2774747.stratoserver.net (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) by h2774747.stratoserver.net (Dovecot) with LMTP id VxqPIrOfFV5XPwAA4+3H6A for ; Wed, 08 Jan 2020 10:24:03 +0100 Return-Path: Received: from mout.gmx.net (mout.gmx.net [212.227.15.15]) by h2774747.stratoserver.net (8.15.2/8.15.2/Debian-3) with ESMTP id 0089O2b5016213 for ; Wed, 8 Jan 2020 10:24:03 +0100 Received: from relay2.uni-heidelberg.de ([129.206.119.212]) by mx-ha.gmx.net (mxgmx001 [212.227.15.9]) with ESMTP (Nemesis) id 1MBlcs-1iz2eG4Afs-00CBa4 for ; Wed, 08 Jan 2020 10:23:57 +0100 Received: from listserv.uni-heidelberg.de ([129.206.100.94]) by relay2.uni-heidelberg.de with ESMTP; 08 Jan 2020 10:23:55 +0100 Received: from listserv (localhost [127.0.0.1]) by listserv.uni-heidelberg.de (Postfix) with ESMTP id 1CD24125DFD; Wed, 8 Jan 2020 10:23:52 +0100 (CET) Received: by LISTSERV.UNI-HEIDELBERG.DE (LISTSERV-TCP/IP release 17.0) with spool id 40819780 for LATEX-L@LISTSERV.UNI-HEIDELBERG.DE; Wed, 8 Jan 2020 10:23:52 +0100 Delivered-To: LATEX-L@LISTSERV.UNI-HEIDELBERG.DE Received: from listserv (localhost [127.0.0.1]) by listserv.uni-heidelberg.de (Postfix) with ESMTP id 080C5125DFD for ; Wed, 8 Jan 2020 10:23:52 +0100 (CET) Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Message-ID: <9857447220797404.WA.kellysmith12.21gmail.com@listserv.uni-heidelberg.de> Date: Wed, 8 Jan 2020 10:23:52 +0100 Reply-To: Mailing list for the LaTeX3 project Sender: Mailing list for the LaTeX3 project From: Kelly Smith Subject: Some Thoughts on Templates To: LATEX-L@LISTSERV.UNI-HEIDELBERG.DE Precedence: list List-Help: , List-Unsubscribe: List-Subscribe: List-Owner: List-Archive: Envelope-To: X-GMX-Antispam: 0 (Mail was not recognized as spam); Detail=V3; X-Spam-Flag: NO X-UI-Filterresults: notjunk:1;V03:K0:sZlrf8yksRg=:841nc5T0o25otM2GzBLdCS5SxO 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 TMO+JbcEiM6iiSJHR0RRYfgMI X-UI-Loop:V01:EJnNvx1DiyE=:KnBHGnSv/BOlYkyB7LMYeOBmVnfAnKtPzyjsyxjtrtk= X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:cC5orewO/kw=:p6wlOHksd0VD/0SwlnajSj ROXpwtY8R8ve0C7JJU6KfCA4s0nUf9fgGHFFzd4LgLfQTT8x5OZrDuHtzk54QLtkY/IqRc4C/ n3XZN3qzj/A5aL3vUpPHflVBA8wjYg6GSIVvz148D8TMFFaTpuYYl2Fo1V5T9pFOP7rNodnx6 +TW7o5FdvRIJ3WLK367B54KBHX5C56lXk3gVZ8D3G7698EPGs59C7CeZlqKdQDfmFJua7bS8p qN5SJrvOmP9wW3rkp18hpOQciTQ02CI+/LlF7CMAdDTBk2F3hb1EGaE3aY6MTUmqBbgJnp/VC JzAEKSAVt3fMQupICDvNgn7prYHvd3c7cF3ON3xSsjgGHnaV/a7egH3WnpKqFjdr7HE/rBtLj e6Hbrk8S9yRYkZ3tOdkfaxmzp+TcC6OCWQI0sd000X4bnGPk7VCf3v9h/3mqabIWmyRjrJuBu PvMf3l79v5KZ4rzegU7eaaOcf4elCaa3kAO/t4zdlEs9SmXT7j3fEPkvdErJSXiar50pCc/Jo g== X-Scanned-By: MIMEDefang 2.78 on 81.169.212.23 Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by h2774747.stratoserver.net id 0089O2b5016213 Status: R X-Status: X-Keywords: X-UID: 8188 Hello! After resuming work on my experimental class, I’ve noticed some things: — My past self made some dubious organizational and implementation decisions. — Although xtemplate provides for hierarchical design, it isn’t as robust as, say, CSS. — Importantly: xtemplate ends up being used for two distinct purposes: 1. Document-level objects, e.g. titles, sections, &c. (xtemplate’s intended use) 2. Typesetting-level objects, e.g. complex layouts, xgalley (an unintended use) I think that the takeaway from this observation is that building a library of composable, parameterized “objects” works well at both the document content and the typesetting layers. That’s not much of a revelation, but it was interesting to see the parallels. Although the ideas involved are similar, I suspect that the interfaces should not be the same at the document content and typesetting levels. I may try playing with some ideas to see what works better for each layer. * * * One thing that I dislike about xtemplate is that the typesetting and programming logic are combined in a single “implementation” block. It should be possible to specify separately the typesetting and the other code (e.g. integer changes, file operations, PDF tagging and links, &c.). Of course, for this separated approach to work, careful consideration has to be paid to when/where code is executed. For example, numbering could be typeset with an off-by-one error, if a counter increment happens at the wrong time. A simple solution would be that, for document-level objects, there are two code insertion points: before and after typesetting. Code that needs to be executed during typesetting would be part of the implementation of the high-level typesetting language and be independent of document-level code. I think that this approach would work for most cases but I don’t know if that’s true. There’s also the question of how composition would work, with this approach. I’d need to consider some examples of complex composition. * * * I like that xtemplate allows me to structure things and compose pieces to make something bigger. That organizational aspect definitely helps when building things. * * * Make of these thought what you will; I hope that they’re of some use. Warmly, Kelly