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 /JUiJ3lnEl6COgAA4+3H6A for ; Sun, 05 Jan 2020 23:47:21 +0100 Return-Path: Received: from mout.gmx.net (mout.gmx.net [212.227.17.22]) by h2774747.stratoserver.net (8.15.2/8.15.2/Debian-3) with ESMTP id 005MlK8X014975 for ; Sun, 5 Jan 2020 23:47:21 +0100 Received: from relay.uni-heidelberg.de ([129.206.100.212]) by mx-ha.gmx.net (mxgmx117 [212.227.17.5]) with ESMTP (Nemesis) id 1MzAxn-1jaRNJ3Ptr-00wGN4 for ; Sun, 05 Jan 2020 23:47:14 +0100 Received: from listserv.uni-heidelberg.de ([129.206.100.94]) by relay.uni-heidelberg.de with ESMTP; 05 Jan 2020 23:47:15 +0100 Received: from listserv (localhost [127.0.0.1]) by listserv.uni-heidelberg.de (Postfix) with ESMTP id 29453124008; Sun, 5 Jan 2020 23:47:07 +0100 (CET) Received: by LISTSERV.UNI-HEIDELBERG.DE (LISTSERV-TCP/IP release 17.0) with spool id 40784367 for LATEX-L@LISTSERV.UNI-HEIDELBERG.DE; Sun, 5 Jan 2020 23:47:07 +0100 Delivered-To: LATEX-L@listserv.uni-heidelberg.de Received: from relay2.uni-heidelberg.de (relay2.uni-heidelberg.de [129.206.119.212]) by listserv.uni-heidelberg.de (Postfix) with ESMTP id EFFE812231B for ; Sun, 5 Jan 2020 23:47:06 +0100 (CET) X-IronPort-MID: 48161485 X-IronPort-RemoteIP: 209.85.221.49 X-IronPort-SenderGroup: UNKNOWNLIST X-IronPort-MailFlowPolicy: $ACCEPTED X-IronPort-Reputation: 3.5 IronPort-PHdr: =?us-ascii?q?9a23=3A8z3t7hMDE6APi+D8+/El6mtXPHoOpqn0MwgJ65?= =?us-ascii?q?Eul7NJdOGZ8o//OFDEvKU93kXEWYzKsbRZjeuTs63hVWEE65ubvzYOfc8ETA?= =?us-ascii?q?cL3OMRmQFoG8uZEQvjNve/bSshEdxCEkB//n67LWBQH9z4ZlvduWG792RUER?= =?us-ascii?q?K5KAkmbv/tFNv0iMK6n/u354WVZgxJgDSnZrYnLhKtoB3R8NYMgIRiNo40zQ?= =?us-ascii?q?HPo31HYPhf3zkuLlXVghWvrtyo8stF9CJd8+kk69YGUaj+ePEgSqdECT09L2?= =?us-ascii?q?0vzMjitB2GUhHWo3VAAyMZlR1HBwWD5xb/B82jiCbxu+tj1SXfBvXYFuxuCx?= =?us-ascii?q?Kl6aojCAXljC4WbXgk9mCSisFxgK9fqh+7qFpzztycZobdL/d4cq7HGLFSDW?= =?us-ascii?q?NcQsZcUTBACYKgfsMOCeQGJ+NRs4j6oRMHsxK/AQCmAO6nxCVPgzf62qgz0u?= =?us-ascii?q?JpFg+jvkRoHdUVvWzU6srvNagSTciwy7POzDPMdO9fw22744+ObxNg6fCAUL?= =?us-ascii?q?RscNbAnFE1HlCg7B3YoojkMjWJk+UV5jLDvqwwCKT10Tdh91Ai6iKizcotlI?= =?us-ascii?q?TT05gYzlnVr2NkxodwJdC5REN/a9O+H91cunL/VcM+T8U8TmVvoCt/xKcBvM?= =?us-ascii?q?vxfi8RxYwngQHFavOHb6CN5QjlVeCeOitxnigjc7X5mhX4oi3CgqXsE9K51l?= =?us-ascii?q?pHtH8PkN7Xu2gNkQPJ68eHVtN4+V2n2DCAzBza8LsCKkdyiKmRePtDivYg05?= =?us-ascii?q?EUt0rEBCr/nk772bSXeksT8e+t8+37Y7/iq8bGZbV5gQz/LKki3/eHL79kbV?= =?us-ascii?q?ooWG6WsaSm2bnq7Be/XbNLy/07k6XUtJrXP8tdqqPrSwlSmp0u7RqyFVLEmJ?= =?us-ascii?q?wRgGUHIVRZeRmGk5mhOlfAJ+r9BOu+hFLkmSlixvTPNLnsSpvXKX2LnLDkdL?= =?us-ascii?q?d7o0lSrWh7hdJY/J9MCvceOvP8WlPZsdvCCB4/PBeoyvy9Tt56kJ4dGCqODq?= =?us-ascii?q?KfLKLOoAqN7+MrLfOLYdxw2n61IPwk6vjyyH4hzAVFLO/5gN1NMin+QqU1a1?= =?us-ascii?q?+UanftnNobRH0HugMvFqr3jlzHUTNSa3u2Va8m6Xc3BdHDb8+LS4azjbiGxC?= =?us-ascii?q?r+EIdRYzUMCFeXHG/oMZqeWvgMdAqXJdVnkzoLTqSoUdVn3hboqQywmN8FZq?= =?us-ascii?q?LEvzYVs57uzo0/5erImAkysyNuDsudz0mISHtyn2UHXCM/xvo5qks711TJgs?= =?us-ascii?q?0ay7RIUNdU4f1OSAIzM5XRmvd7B97FUQXEZt6VSVyiT4z8Uws8Rd8w3dICJn?= =?us-ascii?q?1FNY7+0ULl2CynS/8PmriCFcZy76Tdmnj8Jspwz3zLzqZng1R0Cs1IfXargK?= =?us-ascii?q?Jy7W2xT8bAjlmZmqC2dK8dwD+F9WGNynCLtV1ZVwg4WLvMXHQWbE/b5drj4U?= =?us-ascii?q?aKQ7irALUhegxPrKzKYrNNccHshE5aSe3LPd3fZyeugT71C0rZgLyLa4Xudi?= =?us-ascii?q?MW2yCcQEkIngYP/GqXYAgzAiDyxgCWRDdqFF/pfwbt6bwk8CL9HhJylVvTKR?= =?us-ascii?q?EwhPKv9xUYhOKRUaYJ07YNqX1ntjN1WVaw3t7bD9CNvQUncKgPBLF1qFpBy2?= =?us-ascii?q?/dsBRwe5K6KKU3zFwZaAlvvwXxzRR4CplolM8wqnIswxFuILjCllhGMS6bl8?= =?us-ascii?q?OVWPWfOizp8RajZrSDkEnZy8qT87wT5e4QrlziuES2DBNn/Sk2ldZS1HSY69?= =?us-ascii?q?PBCw9YAveTGg4nshN9ob/deCw04YjZgGZtPaeDuTjHw9s1BeEhx0/8LecaC7?= =?us-ascii?q?uNEUrJK+NfH9KncrR4nl+zaBMCM/tO/bRuecihMeaFivbyYbRQ2Qm+hGEC27?= =?us-ascii?q?hTl0KB8y0mF7zN1pcBhu6Ch06JC2a6g1CmvcT634tDYGNKRzvt+W3fHIdUI5?= =?us-ascii?q?ZKU8MOAGaqLdeww48m1ZvqQXhZ8lG4G1ocgomiflyPbA6l0A=3D=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0B2EgDKZhJehzHdVdFmgkSBPgIBYXR?= =?us-ascii?q?1BDWECYglhnGCEZk8gSMDVAkBAQEBAQEBAQEHAS8BAYRAAoFpHAYGOAINAgM?= =?us-ascii?q?BAQsBAQQBAQECAQIDBBQBAQEIDQkIKYU+DIVfAQEBAwEBEBEPAQUIAQE4Dws?= =?us-ascii?q?YAgImAgI0AQUBHAUBDQgBAR6DAIJ4BKAbgQM9iyaBMoJ+AQEFgkqDJoE0CQk?= =?us-ascii?q?BCHwmAwEBjBYPgUw/gTgPgV9QLj6HWYJerx0Hgjl1BJUbIYJGh32ECA0Fi36?= =?us-ascii?q?fZYlHAgoHBg8jgV2BYzMaND+CbFAYDY0sg1mKU0EzAY57AQE?= X-IronPort-AV: E=Sophos;i="5.69,400,1571695200"; d="scan'208";a="48161485" X-MGA-submission: =?us-ascii?q?MDE5Jiq+J977Z4CjWjzDrhLzp9mPLrqNi0hOQt?= =?us-ascii?q?0gXGGKF1mDU3D0E4dJi8inKjprZtxTYmMAanJ3mSnrDMC08pJlZguOQh?= =?us-ascii?q?MaWkmF6RTGSXTlnCc9osccyXem2+RHyPCkEkObEw8nuw13IHURDgP9N6?= =?us-ascii?q?ULSk83P8aXVTsLR+gXEY9P4Q=3D=3D?= Received: from mail-wr1-f49.google.com ([209.85.221.49]) by relay2.uni-heidelberg.de with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 05 Jan 2020 23:47:07 +0100 Received: by mail-wr1-f49.google.com with SMTP id q6so47671703wro.9 for ; Sun, 05 Jan 2020 14:47:06 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=5JvKWb4KlAzX+PhAQtvVRU5tNazJ+s6XGy1XsZMhX0o=; b=nCpog+QN/oDsF40UPNQ396uBpjm4zSMMQ17Cs+GauGW8q8Z3nmrBe5KCodynzlN2pp r25tx8FVOchv7bpoNjYA9B6r9z7qqNNTWHez8a1sOui0D276HYwx0djhFfB6v1WvOLAA +LdMpp0NOze6pl88z92N9A0O2tULSzRq1dLfutT73Fn1gY/Bf6k47jaIFAx165ae2Ilr eVLaZ2ghtygbGY3JmxzjxNH00foIW7GigjoHuN9LdaUfMUDrDg0tizxHSs0AfRX+62f4 za/xRJdlbQO90cnXh2hWxX3MKc2QcYtsEAdla0EQ8Ql20OuRvzoKM+1gQtLy2sp7gwmC ivdQ== X-Gm-Message-State: APjAAAUvGUVoXYIxLDHqshdGWBe6q6xOPl7ltkgtc3iurdpzOobkXqyj 4WNg2noB3tc4dFnvld5jhig2hE8cKYxcJQ== X-Google-Smtp-Source: APXvYqzdSAgcr/DMif7Z4NnauwOa0s95E7V7fCQkyvESJY0s+KJ4tV9cuQBBL0aV1+w9i2zypDu+mQ== X-Received: by 2002:a5d:6a0f:: with SMTP id m15mr99357978wru.40.1578264425605; Sun, 05 Jan 2020 14:47:05 -0800 (PST) Received: from [192.168.178.20] (82-69-88-43.dsl.in-addr.zen.co.uk. [82.69.88.43]) by smtp.gmail.com with ESMTPSA id n16sm70023139wro.88.2020.01.05.14.47.04 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 05 Jan 2020 14:47:04 -0800 (PST) References: <7344916787947584.WA.kellysmith12.21gmail.com@listserv.uni-heidelberg.de> User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.3.1 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-GB Content-Transfer-Encoding: 8bit Message-ID: <18bcaf7f-cd5e-838c-63a0-3393e15092a5@morningstar2.co.uk> Date: Sun, 5 Jan 2020 22:47:03 +0000 Reply-To: Mailing list for the LaTeX3 project Sender: Mailing list for the LaTeX3 project From: Joseph Wright Subject: Re: Best Practices for Separating Author Syntax and Internal Code To: LATEX-L@LISTSERV.UNI-HEIDELBERG.DE In-Reply-To: <7344916787947584.WA.kellysmith12.21gmail.com@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:NunoDEvkBx0=:vC3u/bJ5DVtC8vxAJkD9HnQr39 C929WPA3bW0rxE7Fxw3gbvU1pJR8omI2l0mAMXPEMI8U67XJOkkkV/MVY81rukjrD1++rqd76 ToRRc2pgAU5YwLX8LvvzuyfS2tJRwicL5tsSo/UCbYLK5GsegWQByKQkWpq9e8ATB+KVxWk3o /fYQgAbQzrWUYAb1N/5TJVe1BHf24g0NFQjbzWiQPaTwU70v+jTn9UlrXSLCCn+cWhiqf6NC6 cr1ns7QvRS5M2Mx73BKWNqJ+FZNAkeJJl549s1m/8FG8g8PICjcEtQg+wllrG0zOu/z20LiA/ DrNCDqmN6hb1HiWkI2vyqVb6CqG51Dw38T+xS7dDtkeCUCTzgg/4VDuUEBHthMhVWVXvbB8A5 g009nW23hqXIorpUWcGU4Fv/54UMuk6ZxpNtzQ3GRXfIbxgDFq536Z5i5O1KVx/zUY/+DXHAp frBmnJ3SFCGutNtMLtW83uQK7TvT43ccTV+Qdr+dPCaKkIOGwRbv4zse9g/XHEReFKB6mnrjL x2YkT5/cgKxNza/hbf4Aelp5+SjEC+LQ2ercuurbTdFywTHciOLLGr/n81K8ttAo0pEP+6KtW JY91aCt9XeRCcV4UAvX+z4KuGWTIvezYHQZiqlzPke7/UMgT+nGqTUiEKklrX2vaPIVqBxHF+ QFQ+0ni9QmsTlHuzZL/DoaUyAWyRrdXagXM0rDWopUnSSEpr7bJ+3s81rYxyPzxWRZ6qcA82L dScka20hzcN/giRH9tZjsNEfbU2m1bk1a/q2MnBC/mB7vPB01F+eZ1YzwEOteTj0KSHqu+L3r BkaVwPiDmIXoosQcitiJ19FAILaGYvuHoL5UlTRJPrysFLqo0fwwup5wyWsI2H2KsAR7BgNBl EOCxD+QXWrFSXbPOC2EOd4CeyV0EUXN7WdWk9H3J841hJDE0SKGff8Ny10eJaH2cNqijwot1q S9C0Q0DoLzzZNdT2T2hlSCgVYgMrJXzwk7PjWVk3mjyMfJnZ4z40P/HkfJl2kPkYbdJqlHYmf NfqwHfnkfsvABg/PTHasH7S39GDAv9MGMuUyOlG2GtfcBcf4unL0RU9YzCXkUjI76OATlYYD3 ADC6PSiEC0XHp/nh0bzEe+mhP+0o271E+/bVGSlck5q/kKqI/Jbb1U2w6goMwS71JeNYClmXx Et2fBWXVyKMAkJZsK+AN4fvTEizralBdDPwwxiyfVukoNNSi3HCK2r5gRNxsBLjqm88m1h2O9 NDEvFHzn/TjZhL1SiWeVC+nzM8DCiHp7yi+LKkjzp3g0iBsW0BsuY4WsQ+ajtS0GMj/w/By89 vTxvHIFn2UrlCR5Ru6cgtRQuBFsR7r3rMj3W8QSzCvXQl0b+uOepZ3zV/1iDCNxdI6iFfldSM 8WJk5RJZ3Xu+zC24HDtpQhclbWue+jX97U34VvC9BOv39Ih9uYe2p31Z4JRAOG/qDX+7HoO0q p5+6hBX23w5ZnWkJ4vYYC88rgFugUjcW+AQhZbHzuLCUmT1k/Rs/fiLPLjWk/+8RmGFHjbgBa z7fo4mSe2PSekEYa4nY/TDAzwELJ42NUtJEa1rW/J2AslN0KlqCq7Y37/u+FkEZoSFw9u8Zre T67IEjDaJst8pKavB6ZvLHKvkZPWI2sAK4jBR0s1hp2bfLQxt85XW+sGnkWWWYfdIJaF6YB+Y GRZpKW+LZl6vj+OFitA9rLs4aWR8kvlKLDpU1TPDvJYCG6bLjgPaAhRfjobe931u1JlMhnGus 4SlN9f/EqDm/LzqDs6TN+fmgsh2gh04ohs42qPvFbzosuY7apbV5nawQ++s3GMCheQO5XHQYp OBux1XeluZbV507BE/DAd1+5odlY3qDgkpYd2Cz1RHYQ717YBLRPWPQ1ERBvT1zg01rNlyy+0 7TAyR9C8jts6ZukG21ab/2wQjyGce9iooBvrKwSzC/u0plUd8ed3gmoa66NvFzY8EKVM1+ZcN cKZIXhzvAClKGz71DYlGL+kjaiTpe4RLvdu4gjfVNwO6FY4xe4WSFQ833aA4RiLAcsFfDGLOo 1AxUbXRvH8QA5ivQwzWvBx6BtWOFvTVYrCYEixMs+ixJIbURV0fU0IZSi672Q9vZfgMNWda5O LWXxB84xSfonNvUosAL1YCBfb6XOjfIBgfzkS71TWj3gXiMwUwqb9mQM2oWSSY01LVXH9AQFe Kp3bVbIj3fTPmUSYAuVSuf5wXvu5YYh2o7L7slVLCcePrOsJMUU0SpJ3E/LsDUpg3I1i5xmK+ TrjyVZYx1N5cONvIszlJThXCRhnZ6dk07hoB44DX0nqkvUa5e7YKbAs0jZaE2ZcEqHe9xmwKK iLbYOGCnqcUGpnoI/ONejEQp28Na5PLM5smd4KMf6/nUExdT2DQYQqGMOVd1u286azlYgckqY BDjiFYx3xd7NfKtXEQwYhcSQqf3xWY/sDWqK68YEyDsu5WAvuVWatrVpWZEnSm2bQFl66PXrw VfvrQ4qRLpO5jQrxvbrrZ2LMLZt3owNJWkjt54RpkKL5VD1+YB/y17fJKc2Pkhx2fqMpjbHLF 36sOcUibmEvzmwNCe8MDZ2bIoFNwdMEYXzWwve3NDigTFu+rTpdVKdLznxitiP/SyjdopVAGi 9s/bnYD+08PQ9SX2ZBSRl2dJU6eeOZGcA3ihSozoYfzwgDK/vhQaPceRnKFqrShUQn8fQcfOO Yjfl863l435PDEoCOvOO4McT4haD99GEV/sel4TPDoG89jA== X-UI-Loop:V01:KYNNxKKiTa0=:JGBvDVs6+7mnLdZKiJUjBY68nBI0cGqM1h6V9/6+9/g= X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:vUqMRUWgj9A=:d1VXaASsQwdihpBEPCDgyQ D7uUJLoqoNX9X5kN1eGurLIYbNtJpmtXVNJzUUxS+c0C4yoFrDqIZWYnYObVVNmWWXr78wD5y cJnZU0Xl9VCK6ER36dIWB8qQhzDICsjW7aeuSud/4JP3inKvzBm37HMHGUtu7m+u4+ngr6wsA QUziGk/BK1jk040lS6LET2RFCFG80K9/f5ZAh3+0vPtwy96zHT12i8b3WKBfjabw195iwUEcY ctNL40TTILiVqCbH2l1i1tpA3KpQjzK5X9iseQZ6xrHrVAZiY4Y7gZYMJwGti15Gry1gbAVCc 7bzzMNPOPqi44JIwVr6plZZt0abweKABDEs4IxI5xpNnCrcbOujr83bhCnHxCQ2RozU3kQMUK rRYxGJ3N37QhUT0VmzncuJWez4eJZq1RO/meb25ymHYJU9YRg19lb6meA8VCGcwn2GPg1xdah 0phOwn+PtL180AbRiDBZ6c6JIdVz4G/XeGAKB4tKrCj0OI0xLCzJdX7Rig3n7+/hfvKHeWEcz Q== X-Scanned-By: MIMEDefang 2.78 on 81.169.212.23 Status: R X-Status: X-Keywords: X-UID: 8187 On 03/01/2020 21:56, Kelly Smith wrote: > A happy New Year to everyone! > > After a long hiatus, I’m finally able to resume working with LaTeX. Of course, this means that I’ll be popping up, with questions, at regular intervals: my apologies, in advance. > > If this question would be better-posed on tex.SX, please let me know, and I’ll move it there. > > I am considering the following (generic) problem… I have a function that is meant to do something with a list of words/numbers/&c. Naturally, I would use a sequence, to represent the list, at the code level. I decide that, at the author level, a semicolon-separated list will be the syntax to use for the list. > > Now, I have two commands: > > — The author-facing command `\makelist{foo; bar; baz}` > — The internal command `\ks__make_list:` > > As you can see, from the function signature, I’m not sure what the internal command should expect. There is no way to, say, generate a sequence literal, and pass it as an `n` type argument. I could pass the semicolon-separated list, untouched, and have the internal function split it into a sequence. However, that would break the syntax-code separation. > > Would it be better to have a local variable, `\l__ks_make_list_a_seq`, and set it before calling `\ks__make_list:`? > > If that is the case, should I follow a the same approach for other, similar situations? > > Warmly, > Kelly > \makelist is a document command so if there is no additional complexity couldn't you use xparse to convert to an open-ended tl and then map to that? \DeclareDocumentCommand \makelsit { > { \SplitList { ; } m } { \tl_map_function:nN {#1} \ks_process_list:n } If not, for more complex cases, I'd end up with the same thing but at the code leve: a documented \ks_list:n taking { a ; b ; c } and doing the split itself: the kind of thing siunitx has to do. Joseph