From: Rik Kabel <ConTeXt@rik.users.panix.com>
To: mailing list for ConTeXt users <ntg-context@ntg.nl>
Subject: [NTG-context] Low-level macro help needed
Date: Wed, 16 Oct 2024 17:18:55 -0400 [thread overview]
Message-ID: <8b8380f8-fcaa-483b-bfd8-dfc4cf554d6e@rik.users.panix.com> (raw)
[-- Attachment #1.1: Type: text/plain, Size: 3079 bytes --]
Hello Hans and developers,
I have been trying to convert some two- and three-step macros (as shown
below) to single-step macros using the LMTX syntax given in the
low-level macros manual. I have succeeded in many cases, but failed when
the macro follows one particular group of patterns.
The group of patterns is similar to this macro to process
\MyMacro[optional]{Required}{Required}{Optional}
In this the number of arguments can be 2, 3, or 4.
A three-step solution might be as follows, which I use for a list of
persons:
\defineregister[Bindex]
\setupregister [Bindex][n=1,
balance=no,
method=default, % or New follows Newton!
compress=no, % yes if not note number+q
expansion=yes,
pagecommand=\gobbleoneargument
]
\starttexdefinition unexpanded Bi
\dosingleempty\doBindex
\stoptexdefinition
\starttexdefinition unexpanded doBindex [#SORTAS]#INDEXED
\def\SortAs{#SORTAS}%
\def\Indexed{#INDEXED}%
\dodoublegroupempty\doBindexFull
\stoptexdefinition
\starttexdefinition doBindexFull #BD#MORE
\doifemptyelse{#MORE}
{\Bindex[\SortAs]{\Indexed\ #BD}}
{\Bindex[\SortAs]{\Indexed\ #BD\\ #MORE}}
\stoptexdefinition
with input like:
\Bi{Rumble, Walker}{1938|–|}%
\Bi{Runia, David Theunis}{1951|–|}{Classicist}%
\Bi{Rutherford, Ernest (Baron Rutherford of
Nelson)}{1871|–|1937}{Physicist}%
\Bi{Saenger, Paul}{1945|–|}%
\Bi{Saldarini, Anthony J.}{1941|–|2001}%
\Bi{Salter, William M.}{1853|–|1931}%
\Bi[Saint-Exupery]{de Saint-Exupéry, Antoine}{1900|–|1944}%
\Bi{Santayana, George}{1863|–|1952}%
\Bi{Sapir, Edward}{1884|–|1939}{Linguist}%
\Bi[Schrodinger]{Schrödinger, Erwin}{1887|–|1961}{Physicist}%
\Bi[Spinoza]{de Spinoza, Baruch (Benedict de Spinoza, Bento de
Espinosa)}{1632|–|1677}%
The best I can get with the newer syntax is a two-step:
\starttexdefinition unexpanded Bi
\dosingleempty\doBindex
\stoptexdefinition
\tolerant\def\doBindex [#1]#=#=#=%
{\doifemptyelse{#4}
{\Bindex[#1]{#2\ #3}}%
{\Bindex[#1]{#2\ #3\\ #4}}%
}
In the low-level macros manual, near the end of chapter 2, it says that
some day there may be a use for #?, #!, #<, or #>. If I am not missing
something in the manual about how to provide that first optional
argument as an empty value, I think I have one. Could [#?] always return
a value (perhaps empty)? That would allow something like:
\tolerant\def\doBindex [#?]#=#=#=%
{\doifemptyelse{#4}
{\Bindex[#1]{#2\ #3}}%
{\Bindex[#1]{#2\ #3\\ #4}}%
}
--
Rik
[-- Attachment #1.2: Type: text/html, Size: 4022 bytes --]
[-- Attachment #2: Type: text/plain, Size: 511 bytes --]
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / https://mailman.ntg.nl/mailman3/lists/ntg-context.ntg.nl
webpage : https://www.pragma-ade.nl / https://context.aanhet.net (mirror)
archive : https://github.com/contextgarden/context
wiki : https://wiki.contextgarden.net
___________________________________________________________________________________
next reply other threads:[~2024-10-16 21:24 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-16 21:18 Rik Kabel [this message]
2024-10-16 21:48 ` [NTG-context] " Wolfgang Schuster
2024-10-17 1:07 ` Rik Kabel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=8b8380f8-fcaa-483b-bfd8-dfc4cf554d6e@rik.users.panix.com \
--to=context@rik.users.panix.com \
--cc=ntg-context@ntg.nl \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).