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 2T1ZK9yufmABagAA4+3H6A for ; Tue, 20 Apr 2021 12:37:16 +0200 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 13KAbF8R027135 for ; Tue, 20 Apr 2021 12:37:16 +0200 Received: from relay2.uni-heidelberg.de ([129.206.119.212]) by mx-ha.gmx.net (mxgmx115 [212.227.17.5]) with ESMTP (Nemesis) id 1MA6GQ-1lNCud270U-00Birz for ; Tue, 20 Apr 2021 12:37:09 +0200 Received: from listserv.uni-heidelberg.de ([129.206.100.94]) by relay2.uni-heidelberg.de with ESMTP; 20 Apr 2021 12:37:08 +0200 Received: from listserv (localhost [127.0.0.1]) by listserv.uni-heidelberg.de (Postfix) with ESMTP id 439D712899D; Tue, 20 Apr 2021 12:37:00 +0200 (CEST) Received: by LISTSERV.UNI-HEIDELBERG.DE (LISTSERV-TCP/IP release 17.0) with spool id 47057282 for LATEX-L@LISTSERV.UNI-HEIDELBERG.DE; Tue, 20 Apr 2021 12:37:00 +0200 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 13082127B04 for ; Tue, 20 Apr 2021 12:37:00 +0200 (CEST) X-IronPort-MID: 104713735 X-IronPort-RemoteIP: 209.85.128.53 X-IronPort-SenderGroup: UNKNOWNLIST X-IronPort-MailFlowPolicy: $ACCEPTED X-IronPort-Reputation: 2.7 X-IPAS-Result: =?us-ascii?q?A0BDDADGrX5gfzWAVdFQCh4BAQsSDECDdn5XKgQ8hEOJB?= =?us-ascii?q?IhFLQOPKIxoA1QLAQEBAQEBAQEBCAEdDwgEAQGEUAKBdAIdBgY0EwIDAQEBA?= =?us-ascii?q?wIDAQEBAQEFAQEBAgEDAwQUAQFuhVANhkUBAQIBAQEBEBEVCAEBOAQLCxoCJ?= =?us-ascii?q?gICNAEFARwFAQ0IAQEWCIJPAYJmIQ+bWoEEPYo4eYEygQGCBAEBBoEzAYEYg?= =?us-ascii?q?1eBOwMGCQEIfiqFaRM/hxonEIFVQoE6D4I2Nj6CSRcBAQEBGIEQCUaCfoJhg?= =?us-ascii?q?kwGKA4+BA8sBRA7NRNBBSViDwOQNDCLSoEpm3RoLAeDD4EgBguHJYESjHCGK?= =?us-ascii?q?QUqg089kBcOM5AeoQ6SYgQSDYRGAgoHBhAjgUghgVszGjQ/gmlQGQ6OHwwWg?= =?us-ascii?q?06FFIVKQDICCS0CBgoBAQMJjQ8BAQ?= IronPort-PHdr: A9a23:NC8r8xLu139OU+xyx9mcuJJgWUAX047cFxMJ6pchl7NFe7ii+JKnB kHE+PFxlzfhR4jf4uMezffQsuXgVG0M7JKLvWoNNpBBBFcekctDuQsmDYaeDFHjaubwZnk4G 99PTF8j4Gu6PkhJMMP5fVvTpHKp8TcIQFP0MkxoJbe9AZbc2uKw0e364JjPe0NNjTu5b6l1K UC0qh7crslQnpFjJaYt4h7OuH1JfetN2WpyfxSYmFDh5ZT454ZtpgJXvf9p7MtcSeP6cqA/G KRfFygjOnsp6dfDsBDCSU6Q4yJZXDhN1BVPBAfB4VfxWZKZmhH3ved8xiSWePbOY9gcfzOk4 u8rUhLsgTZdcSM/8STXh818gaZRrQiu4RBykcbSZ8mOOfxyc7m4H5tSTHddXstXSy1KA5+tJ 4oJAe0bOO9Ero7771IQpBq6DAOoCavh0DhNznPx2KQ71awmH2SklEQiGMkDqHSSs8/0O6cOe eWy1q/JyzrYc/pMg3H2787VcVFpoP2BW65xbduE0VMmRGanxh2brY3oOS/Q1/xY6TDKqbo9E 7v12yh68FI5uDWky8Yyh5OcnI8Rw0Geszh/wcM1KNy0RUpxbMSrVpdd5ET4f8N7RN0vR2Zwt WM00LoD7NS5ezMH0JRh2ATeZPybW42P+BTiUumKPT5i3jRuf/SihFzhlCrogv25TcSy3FtQ+ 2BHlcLBrnBLyAbS5cibYv565EGg3zmUywnJsKdPJgYpluCITvxpiq51nZ0Vv0PZGybwk0ijl 66aeHIv/e2w4vjmaLHrzremOoR5ix/zPuEVouLXKcI/NAVGH3KW/e2tjvv++0y8QLhLgvAym KTDv9bWKJZToKnxGAJT3os5jnT3Rz67zNQVm2UGJ1NZaVqGiYbuIVTHPPH/C7+2nV2tlD5hw /2OMKfmB93BKX3KkbGpergYiQYUyg0owMhfoY1OC74BPNr2XVX3tdrXFQMwKVbyyOGhFdY8n oISVGSTA7OIZabbsFuG/OUqcIzuLMcevDfwLeRg5ua71ydo3w9AO/Dzjd1KMyPwBPltLkSHb GC5mNoFGHZQ+Bc4TanqhVyOXDpZamy9Ga4xtVRZQMqrC5nOQoe1jfmPxiC+S9dUYXtLElDKD m3peIWYc/ILciSTJMB6jjUeD/6qTMk81lv90W2yg6oiNefS9iAC4Njh08N4/+2Vigsz+jxoJ 8GayWeMSW5vgmoSHXk92+ZiogYurzXLmbg9iPteG9tJ4vpPWQpvLp/QwdtxDNXqUx7AdNOEI H6cT96rAC88QpcK+/FmS2B6HdjqzgrO2yO7WfkIkb3OBJE1/q/Y1XXrKIBxxiSO0q5plFQgT sZVUA/uzqdi6wjeAZLImESFhu6rc6obxivE6GaEyyKHokhZVAd6VaiNU2oYYwPaqtHw50WKS LHLa/xvKgxa1cuLMbdHcPXshFRCAejmYZHQPjn3lGC3ChKFgLiLacuiemkQ2jncFFlRkw0X+ iXjV0B2DSOgrmTCST12QAi3MgW8rK8n8iP9ExRnhxuHZEBgybevrwQYgfWNEbUO2LNBuCogp zhwFlun0JTaBonlxUIpcaNCbNc6+FoC23jeslk3PJu7IrhiwEEEcgt3o2vr0A9xC4NPitQjt ilsxw00NKHSgzYjP3uImIv9PLHaMDy45Be0d6vfwU3Tyv6T86YLres98hDt4VrvGU0l/HFql dJS1jHPg/eCRBpXWpX3XEEt8hF8rLyPeSgx6bTf0nh0OLW1uDvPs/oZQdA9wxPlRO9xdbueH WfaFsoAAcmoJ/c2kkLzKBkDev1RpvZcF/PjTOOP3euQBMglnD+iigxv5Yl81geT8nM5RLOTm ZkCxP6c002MUDKu1D+JgoXMgYlBIAoqMC+6wCngCpRWY8VaeIERD2aoLNarz88kwZXqHWNbp gbLOg== IronPort-HdrOrdr: A9a23:6JppWazmCVRFYKjf1/s6KrPwkr1zdoIgy1knxilNYDZSddGVkN 3roeQD2XbP+VEscVwphNzoAtj4fVry7phwiLNhWIuKeCnDlC+WIJp57Y3kqgeQfxHW0uJGz6 9vf+xfBbTLfD5HpP336gW5DNosqePvmMvH5Nv29WtnTg1hdshbnmREIzuce3cXeCB2QaMZLd 67/cpIpz2pZHQRYICADGIERvWrnayoqLvWJSQeDxpiwgiDhzGl8/rEHwOD3hEYOgkk/Z4StV Ldmwi8w6m9v/TT8HLh/l6W1Y1fnJ/a19NfGNbksKcoAwSpsB+hYMBdW7mP1QpYnN2S X-IronPort-Anti-Spam-Filtered: true X-IronPort-AV: E=Sophos;i="5.82,236,1613430000"; d="scan'208";a="104713735" X-MGA-submission: =?us-ascii?q?MDEwAKioXRoX35UryG6SlBckhIPMrZnM9smJXM?= =?us-ascii?q?5J22a6izhZPD5QBaQm5X9hxsi14S2PWXu/+Dt2SSduGcVm9MsvGf2jyN?= =?us-ascii?q?8vixa517tgBi6QfcFoDBx36hfllICsQssglJ8avizBx4mAppmoJ1ZBvH?= =?us-ascii?q?C1ZZuCKgbwyCU4H47yh/y0RQ=3D=3D?= Received: from mail-wm1-f53.google.com ([209.85.128.53]) by relay2.uni-heidelberg.de with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 20 Apr 2021 12:36:58 +0200 Received: by mail-wm1-f53.google.com with SMTP id n10-20020a05600c4f8ab0290130f0d3cba3so851413wmq.1 for ; Tue, 20 Apr 2021 03:36:59 -0700 (PDT) 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=nPHphxUGHWwpMVAy58i4R+rPDhh901b0papOtmo5UKQ=; b=GyKzKA2BFVJOoftQvIpzVJxvkfwS8F3E4ZUHQ0a2wTG8xAVd0P91/xwnufMlYLL7fW 4boNVDPH321S1zpEKZZ2Wyxn5kk/RAkFjGYwm0cCKqRF+BD6IpIMoUK8aeIAnQ+4DTXZ m07sdx5nIUyPSlrfjiC77DGdopPEKUea5Iay0sETO//D333xsjx6Akzj+mecns1Qs7E9 cV8+pv/B0YwKWIhpSCRM3XagdAdM+DFshg+AySWFsAY9GB6f2kMdbTN3Umf1w3xhChGw AfiMb8/Hauv80GU+x2NJJDvd4KaijWM5OxWOh0JzGln227jWXMf5KWPcOGIbvwut+C8I uAFQ== X-Gm-Message-State: AOAM532ec806Qtl0zlmaLElW9xq54Ms+j1AWtfg3EWSzTGoxm8TO3L+Y taWLhLxTPtQetz7Vo/n2QcGeXnQ7eibjqA== X-Google-Smtp-Source: ABdhPJx4EQYbAgFYRS9xuiUnaowDR2+oIWgCRp88UO4cDWJtwBAfAywujsmMpV2c+duiIcpX54b8fg== X-Received: by 2002:a05:600c:2141:: with SMTP id v1mr3755263wml.22.1618915018834; Tue, 20 Apr 2021 03:36:58 -0700 (PDT) Received: from eduroam-200-21.uea.ac.uk (eduroam-200-21.uea.ac.uk. [139.222.200.21]) by smtp.gmail.com with ESMTPSA id 24sm3208926wmk.18.2021.04.20.03.36.58 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 20 Apr 2021 03:36:58 -0700 (PDT) References: <20210420080026.GA823@polynum.com> User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.9.1 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-GB Content-Transfer-Encoding: 7bit Message-ID: <0127509d-02b8-daa7-a49f-6bf459e75cd7@morningstar2.co.uk> Date: Tue, 20 Apr 2021 11:36:57 +0100 Reply-To: Mailing list for the LaTeX3 project Sender: Mailing list for the LaTeX3 project From: Joseph Wright Subject: Re: LaTeX required primitives: some questions To: LATEX-L@LISTSERV.UNI-HEIDELBERG.DE In-Reply-To: <20210420080026.GA823@polynum.com> 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:nzal2X3whDM=:TfvsVjbSshduGMdFs04jH9CZTP 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 zdtzTD X-UI-Loop:V01:kLft4vsZtw4=:0aWYrzZhAfv286I8FU1sy9Mn2Lr5Poz3BDSbyZ8zxm4= X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:+n+j5fhwt2w=:8T4j6ycnm6bUbWo7eFCP80 v9w4Gonm6+088nPX5uCFxqtx0DlzNZYcIdThaVMv+RKlJkt+bpnr05NN7STkeqIp3X95UEli+ CX3OQ4yJTRyK/CyLjxNGxNP110yqgBr95fAl0c8qEuMnliW19mBDuO4DEv3PuMpCMx7HQPi5W aS5bVq33UbjGaWjvA8ywDDDXdl4yFfmzze5L0czY5OmenikwLSyFG1HzGPZi9ZMOaRZF0iKl+ /hXrwO8ci3ZyQ1013zdGt/BltPq8oqra07qF7o/TcoD1+CWdFlcxEjYP7ab5NEkRWHfjBB0rK O0MwwcFVFjxqsR+0fzYo/9fHQsqwjLmkPyjVey1ZCwVj+lo3+YJ0Mj5FCxR+aoPCxe9oIyc3Y s2prM5nO+E6tloFfT2lb7nzg3HN2/GghRtwPKGKnmIGbYorpJY2yNiDoY+ywSaZGZSK4RK7XS 84imqXk68I1klZf7+/pDsN8wU7MYZyDc7M88F1DsPhhwdsbe3WRKXRPkWR8t4yrg3n6TkXaCq ioyp8vp3zXNYTZeo4fzwqKP6NfkjARB4e2JdYW5uffbGMWxUaa92yF7c6j5X4S3FCnbML4u16 q2JW4uO4D3Q+YG0Zkf7SU9rgg3Hezue2G4ynkmY+jhRNjxv4y31vlCPQ== X-Scanned-By: MIMEDefang 2.78 on 81.169.212.23 Status: R X-Status: X-Keywords: X-UID: 8259 Hello, > I have started to look at the implementation of the LaTeX required > primitives supplementary to TeX + e-TeX ones and I have some questions. > > Note: I work with the definitions found in the pdfTeX manual and will > not look at the code since it is GPL'ed one and I don't want someone > later to claim that my code shall be released under GPL because my eyes > have touched GPL code. If you want to avoid the source of pdfTeX, you are likely best starting with descriptions of the 'cross engine' primitives that have been implemented by other engines. I would start with: - l3names. This makes copies of all primitives from all engines supported by expl3 into a single namespace. What's important here is that we've worked hard to identify which \pdf... primitives are actually PDF-related. Only those that relate to PDFs rtain the 'pdf' part of the name (*). See lines 605 onward of the current file (https://github.com/latex3/latex3/blob/5b6e6f30397930ba96a2b6744171263b370504d5/l3kernel/l3names.dtx#L605) (*) The 'version' primitives \pdftexbanner, \pdftexrevision and \pdftexversion retain 'pdftex' in their names when saved. - The XeTeX manual. As XeTeX doesn't directly product PDF output, any primitives it provides are not PDF-specific, naming notwithstanding. (Newer additions to XeTeX omit the \pdf..., older ones do not) - The e-pTeX setup in https://www.tug.org/svn/texlive/trunk/Build/source/texk/web2c/eptexdir/pdfutils.ch?view=log, which provides the 'utility' primitive. (There is code in this file, but the first ~30 lines are purely descriptive) > PDF only primitives that I will not implement (correct?): > > \pdfpageheight > \pdfpagewidth These work (no error) in DVI mode with pdfTeX, but more importantly in XeTeX write information of xdvipdfmx to the XDV file. I would suggest having them at least as no-ops. > Primitives that seem highly linked to PDF and that, to be implemented, > would need to draw in not ISO C routines but POSIX or MS specific > because they are linked to filesystems: > > \pdfcreationdate This one is linked to the PDF, but not the file system: it's what is written to the PDF for /CreationDate. > \pdffilemoddate This extracts data about a general file from the file system: it's not linked to PDF at all. It might be used for example to check on an image or data file. > Primitives that seem highly linked to PDF but that can be implemented > using ISO C routines: > > \pdffiledump > \pdfmdfivesum > \pdffilesize ? (size can be more than integer accepted by TeX) Again, these are not linked to PDF at all: they all work in DVI mode. You could look at the Lua implementation of these used by expl3 - that avoids any GPL code. (We want the same *output* as pdfTeX gives, not the same implementation.) I don't think I've ever seen a test of what happens if \pdffilesize is used on a truly massive file. > Primitives whose output seem unclear: > > \pdfnormaldeviate > \pdfuniformdeviate > > said to generate "an integer" and, afterwards said to expand "to a list > of tokens". Do they provide, on each call, one integer with the defined > property or a series of a defined cardinal of such integers or an > infinite series of such integers until interrupted? Each use gives one integer. For example, if I do \pdfsetrandomseed 1234 \message{ \pdfuniformdeviate 1000\space\space \pdfuniformdeviate 1000\space\space \pdfuniformdeviate 1000\space\space \pdfnormaldeviate \space \pdfnormaldeviate \space \pdfnormaldeviate \space } I get "555 3 641 34071 -99169 33759". Note that the code for the RNG here comes from MetaPost, and was lightly modified to put it into pdfTeX. *Exactly* the same implementation is used by XeTeX, pTeX, upTeX and LuaTeX, means that with the same random seed the same series of values is obtained independent of the engine used. I would strongly urge you to look at the original MetaPost code (I believe not GPL). > The pdf prefix exists because the primitives were added to TeX in pdfTeX > but it is unfortunate because it seems to link the primitives to the > PDF format. I'd like to implement them without the pdf prefix and > provide simply a file for compatibility with \let statements. Would it > be OK? As noted, XeTeX has adopted a 'no \pdf...' approach for newer stuff, e.g. \strcmp rather than \pdfstrcmp. That works fine provided the names are not too generic. > \engine: a read-only ASCII token identifying the engine: ex.: e-TeX; This is a very generic name. Moreover, the established pattern is that engine define \version and \revision, which can then be used as markers for the specific engine. Note that upTeX doesn't do that, and that makes identifying that engine more tricky already. > \apimajor: a positive or nul integer identifying a definite list of > primitives provided; > > \apiminor: a positive or nul integer identifying a definite behavior > (nature, parameters, output, errors) of the primitives; > > \apirevision: a positive or nul integer identifying an implementation > of the (major, minor) combination---the major and minor identify a > contract; the revision identifies a modification of the > implementation of the contract including a correction because the > implementation didn't actually provide the contract. I.e.: bug > fixes, optimizations etc. without any contract modification. The > contract is theoretical. Again, this just feels like \version/\revision: see for example how older pdftex.def used to check for available features. (Standardisation of engine features over recent years means that this is generally not needed.) > \outfmtlist: a series of ASCII tokens identifying the output format > supported by the engine. Ex.: DVI1.0 (traditional DVI), PDF1.3 etc. > The default format shall be listed first. (Note: I plan, some day, > to extend DVI.) pdfTeX already defines \pdfoutput, which is 0 for DVI and 1 for PDF. LuaTeX renames that to \outputmode but with the same numerical values. The version of PDF written by pdfTeX/LuaTeX is set separately using (in pdfTeX) \pdfminorversion/\pdfmajorversion, as this is really a separate concept to whether PDF or DVI is in use. There is very little use at the macro level for the DVI level. The PDF level does have some impact on output features but in a simply 'Sorry, not doable' sense. Note that XeTeX uses XDV, which is a version of DVI dedicated to this engine. It's not necessary to test the DVI version at the macro level: what's important is for example which method to include imagines, which uses an engine test. > \outfmtset: setting the output format, that shall be amongst the formats > supported. If not, it returns an error and set the output format to > the default one. Shall be set before \shipout and errors if used > after output has started. > > \outfmt: a token identifying the current output format. See above: data in the same format as other engines is strongly preferred. I notice you don't mention a large number of the other utility primitives. A full list of those assumed by LaTeX in an engine-neutral sense is listed in https://www.latex-project.org/news/latex2e-news/ltnews31.pdf. See in particular that \pdfpage(height|width) are included. Joseph