ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
From: Wolfgang Schuster <wolfgang.schuster.lists@gmail.com>
To: mailing list for ConTeXt users <ntg-context@ntg.nl>,
	Pablo Rodriguez via ntg-context <ntg-context@ntg.nl>
Cc: Pablo Rodriguez <oinos@gmx.es>
Subject: [NTG-context] Re: imposition: getting to the last page of a booklet
Date: Wed, 6 Mar 2024 19:50:53 +0100	[thread overview]
Message-ID: <94341cac-161d-f830-369d-d598418f34a3@gmail.com> (raw)
In-Reply-To: <112448bc-0647-8de3-7aa5-30c9c6d7305a@gmx.es>

Pablo Rodriguez via ntg-context schrieb am 04.03.2024 um 20:00:
> On 2/28/24 19:28, Wolfgang Schuster wrote:
>> [...]
>> \def\beforequadruplenumber#1%
>>     {\ifcase\numexpr#1+1;4\relax
>>        \number\numexpr#1+4\relax
>>      \else
>>        \number\numexpr#1+3-#1;4\relax
>>      \fi}
> 
> Sorry for not having answered before, Wolfgang.
> 
> I’m afraid I don’t get how \ifcase is deployed with as conditional
> (being \ifcase used to give numbers for weekdays or months).

The \ifcase command is the TeX version of a switch statement from other 
programming languages.

The first case in \ifcase checks against zero which is shorter than 
writing "\ifnum ... = 0".

> The semicolon is also mysterious to me, I don’t know what it does there
> in plain language.

The semicolon is a undocumented extension (I noticed it in the 
definition of \page[quadruple]) of \numexpr in Luametatex for the 
modulus operator.

> Sorry, I know it has to be simple, but the syntax is too cryptic for me.
> 
> Could you write the first line in plain language?

Look at the second example of the Lua code in the example below for each 
command (the first example is your version), the third example is just a 
condensed version of example 2.

> Sorry for asking that. I’m afraid this would be the only way I could get
> what \ifcase is doing there.

As was mentioned above I used it as a check when the remainder was 0.

%%%% begin example
\startluacode

--~ interfaces.implement {
--~     name      = "beforequadruplenumber",
--~     arguments = "integer",
--~     actions   = function(n)
--~         if n % 4 == 0 then
--~             context(n + 3)
--~         elseif n % 4 == 1 then
--~             context(n + 2)
--~         elseif n % 4 == 2 then
--~             context(n + 1)
--~         elseif n % 4 == 3 then
--~             context(n + 4)
--~         end
--~     end
--~ }

--~ interfaces.implement {
--~     name      = "beforequadruplenumber",
--~     arguments = "integer",
--~     actions   = function(n)
--~         if (n + 1) % 4 == 0 then
--~             context(n + 4)
--~         else
--~             context(n + 3 - n % 4)
--~         end
--~     end
--~ }

interfaces.implement {
     name      = "beforequadruplenumber",
     arguments = "integer",
     actions   = function(n)
         context(n + (((n + 1) % 4 == 0) and 4 or (3 - n % 4)))
     end
}

--~ interfaces.implement {
--~     name      = "afterquadruplenumber",
--~     arguments = "integer",
--~     actions   = function(n)
--~         if n % 4 == 0 then
--~             context(n + 1)
--~         elseif n % 4 == 1 then
--~             context(n + 4)
--~         elseif n % 4 == 2 then
--~             context(n + 3)
--~         elseif n % 4 == 3 then
--~             context(n + 2)
--~         end
--~     end
--~ }

--~ interfaces.implement {
--~     name      = "afterquadruplenumber",
--~     arguments = "integer",
--~     actions   = function(n)
--~         if n % 4 == 0 then
--~           context(n + 1)
--~         else
--~           context(n + 5 - n % 4)
--~         end
--~     end
--~ }

interfaces.implement {
     name      = "afterquadruplenumber",
     arguments = "integer",
     actions   = function(n)
         context(n + ((n % 4 == 0) and 1 or (5 - n % 4)))
     end
}

\stopluacode

\unprotect
\def\beforequadruplenumber#1{\clf_beforequadruplenumber\numexpr#1\relax}
\def\afterquadruplenumber #1{\clf_afterquadruplenumber \numexpr#1\relax}
\protect

\starttext
\dorecurse{20}{\recurselevel\space = 
\beforequadruplenumber{\recurselevel}\par}\page
\dorecurse{20}{\recurselevel\space = \afterquadruplenumber 
{\recurselevel}\par}
\stoptext
%%%% end example

Wolfgang

___________________________________________________________________________________
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
___________________________________________________________________________________

  reply	other threads:[~2024-03-06 18:54 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-23  9:07 [NTG-context] " Michael Guravage
2024-02-24 13:30 ` [NTG-context] " Wolfgang Schuster
2024-02-27 10:13   ` Pablo Rodriguez via ntg-context
2024-02-28 10:56     ` Bruce Horrocks
2024-02-28 11:24       ` Pablo Rodriguez via ntg-context
2024-02-28 18:02         ` Pablo Rodriguez via ntg-context
2024-02-28 18:28           ` Wolfgang Schuster
2024-03-04 19:00             ` Pablo Rodriguez via ntg-context
2024-03-06 18:50               ` Wolfgang Schuster [this message]
2024-03-06 19:17                 ` Pablo Rodriguez via ntg-context
2024-03-07 15:36                   ` Wolfgang Schuster
2024-03-06 20:38                 ` Hans Hagen
2024-03-06 21:06                   ` Wolfgang Schuster

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=94341cac-161d-f830-369d-d598418f34a3@gmail.com \
    --to=wolfgang.schuster.lists@gmail.com \
    --cc=ntg-context@ntg.nl \
    --cc=oinos@gmx.es \
    /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).