ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
From: "Thomas A. Schmitz" <thomas.schmitz@uni-bonn.de>
To: mailing list for ConTeXt users <ntg-context@ntg.nl>
Subject: Re: Marginal line numbers
Date: Fri, 17 Dec 2010 09:27:16 +0100	[thread overview]
Message-ID: <590F8199-83A7-4ADA-83BE-2DB7F516EB98@uni-bonn.de> (raw)
In-Reply-To: <AANLkTin6cUTVF5T98hXm2A-SiXE+J3QGiAnTOx_bmMw+@mail.gmail.com>


On Dec 16, 2010, at 10:28 PM, Jon Crump wrote:

> Thomas, et alia.
> 
> Thanks so very much! I now have this:
> 
> \startluacode
> function filter(s)
>   if math.mod(s,5) == 0 then
>     context.color( { "darkred" }, s )
>   end
> end
> \stopluacode
> 
> \define[1]\MyNumber%
> {\ctxlua{filter(#1)}\endgraf}
> 
> \startxmlsetups xml:lb
> 	\lineNumbers{\MyNumber{\xmlatt{#1}{n}}}
> 	\xmlflush{#1}
> \stopxmlsetups
> 
> \defineinmargin [lineNumbers] [outer] [normal]
> 

This was just an example to show you how to use lua to do things which are difficult or impossible or cumbersome in TeX alone, such as math, working with strings (substitutions, etc.), conditionals, loops... You don't have to take my code verbatim; the "darkred" was just meant to show that you can apply certain code to a number if it matches a condition (here: be divisible by 5).

> This gets me what I wanted.  Still fumbling greatly with the macro
> syntax. I'm not sure what the recursion is for, for example. On the
> other hand the lua seems rather straightforward to me by comparison. I
> tried returning an empty string like this: context.color( {"blue"}, ''
> ) to remove the other numbers, but that seemed silly, so I just
> removed the 'else' clause instead, and that seemed to work as well.
> 

Yes, of course, if all you want  is process numbers divisible by 5, that's the easiest way. But it's good to know that lua allows more complex conditionals - you could use "elseif"s to make numbers divisible by 100 bold, or whatever. I find such conditionals in TeX much more cumbersome; even for somebody with no programming background like myself, they are easy to write in lua.

The recursion was just a way of demonstrating the effect. \dorecurse is a wonderful macro to construct minimal examples (you can search the mail archive for some real gems). And, as a hint: constructing a compilable minimal example not only is educational (I don't know how often I could solve my problems when I tried to produce a minimal example and saw where my approach was failing), but will also improve your chances of people actually willing to help you. If you want to see an elegant way of producing minimal examples in xml, search the mail archive for "xmlprocessbuffer."

Thomas
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________


  parent reply	other threads:[~2010-12-17  8:27 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-12-14 20:33 Jon Crump
2010-12-16  7:34 ` Thomas A. Schmitz
2010-12-16 21:28   ` Jon Crump
2010-12-16 21:34     ` Wolfgang Schuster
2010-12-17 16:37       ` Jon Crump
2010-12-17  8:27     ` Thomas A. Schmitz [this message]
2010-12-17 22:41     ` Thomas A. Schmitz

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=590F8199-83A7-4ADA-83BE-2DB7F516EB98@uni-bonn.de \
    --to=thomas.schmitz@uni-bonn.de \
    --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).