ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
From: Denis Maier via ntg-context <ntg-context@ntg.nl>
To: <mseven@telus.net>, <ntg-context@ntg.nl>
Cc: denis.maier@unibe.ch
Subject: Re: Foonotes in Captions ... again
Date: Thu, 16 Jun 2022 09:15:55 +0000	[thread overview]
Message-ID: <c5838597f66e4bbf9a64f6a8eb188c41@unibe.ch> (raw)
In-Reply-To: <cdaa5ff8-803c-55a1-4a54-d79f52f4e0f1@telus.net>

Thanks, Max! That's very neat, and it indeed works in my use case.

Can anyone see any drawbacks here?

Best,
Denis

> -----Ursprüngliche Nachricht-----
> Von: Max Chernoff <mseven@telus.net>
> Gesendet: Donnerstag, 16. Juni 2022 01:32
> An: ntg-context@ntg.nl
> Cc: Maier, Denis Christian (UB) <denis.maier@unibe.ch>
> Betreff: Re: [NTG-context] Foonotes in Captions ... again
> 
> > What's the current state of affairs regarding footnotes in floats? Both
> version in the example below don't quite work...
> > (Ideally, the note should be on the page with the float and the
> > caption, but the numbering should also be adjusted.)
> 
> We can completely abuse a bunch of different ConTeXt features to ensure
> that the footnote numbers are always in the page order.
> 
>      % New Code
>      \unprotect
> 
>      \startluacode
>          userdata.visual_order = 0
>          userdata.input_order = 0
>          userdata.save_data = job.passes.define("saved_footnotes")
>          userdata.previous_data = job.passes.getcollected("saved_footnotes")
> 
>          interfaces.implement {
>              name = "set_footnote_number",
>              actions = function ()
>                  userdata.input_order = userdata.input_order + 1
> 
>                  local input_index = userdata.input_order
>                  local page_index = userdata.previous_data[input_index]
> 
>                  if page_index then
>                      structures.counters.set("footnote", 1, page_index - 1)
>                  end
>              end
>          }
>      \stopluacode
> 
>      \def\save_footnote_data#1{%
>          \latelua{
>              userdata.visual_order = userdata.visual_order + 1
>              userdata.save_data[#1] = userdata.visual_order
>          }%
>      }
> 
>      \let\old_footnote=\footnote
> 
>      \starttexdefinition protected footnote #1
>          \begingroup
>              \clf_set_footnote_number
> 
>              \def\insert##1\bgroup##2\egroup{
>                  \normalexpanded{
>                      \noexpand\save_footnote_data
>                      {\cldcontext{userdata.input_order}}
>                  }
>                  \normalinsert##1{##2}
>              }
> 
>              \old_footnote{#1}
>          \endgroup
>      \stoptexdefinition
> 
>      \protect
> 
>      % Original Example
> 
>      \starttext
> 
>      \footnote{asdf} \footnote{asdf} \footnote{asdf}
> 
>      \input ward
> 
>      \startplacefigure[title={asdfasdf\footnote{test 1}}]
>      \externalfigure[cow.pdf]
>      \stopplacefigure
> 
>      \footnote{asdf} \footnote{asdf} \footnote{asdf}
> 
>      \startplacefigure[title={asdfasdf\footnote{test 2}}]
>      \externalfigure[cow.pdf][height=10cm]
>      \stopplacefigure
> 
>      \footnote{asdf} \footnote{asdf} \footnote{asdf}
> 
> 
>      \page
>      \footnote{asdf} \footnote{asdf} \footnote{asdf}
> 
>      \input ward
> 
>      \startplacefigure[title={asdfasdf\footnote{test 1}}]
>      \externalfigure[cow.pdf]
>      \stopplacefigure
> 
>      \footnote{asdf} \footnote{asdf} \footnote{asdf}
> 
>      % (Can't use postponingnotes)
>      % \startpostponingnotes
>      \startplacefigure[title={asdfasdf\footnote{test 2}}]
>      \externalfigure[cow.pdf][height=10cm]
>      \stopplacefigure
>      % \stoppostponingnotes
> 
>      \footnote{asdf} \footnote{asdf} \footnote{asdf}
>      \stoptext
> 
> Here, we save a mapping between each footnote's index in the input and its
> index in the output to the .tuc file. The code is definitely not pretty, but
> works well enough for the sample file provided.
> 
> -- Max
___________________________________________________________________________________
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://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki     : http://contextgarden.net
___________________________________________________________________________________

  reply	other threads:[~2022-06-16  9:15 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-15 15:05 Denis Maier via ntg-context
2022-06-15 23:31 ` Max Chernoff via ntg-context
2022-06-16  9:15   ` Denis Maier via ntg-context [this message]
2022-06-16 11:09     ` Denis Maier via ntg-context
2022-06-16 18:56       ` Henning Hraban Ramm via ntg-context

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=c5838597f66e4bbf9a64f6a8eb188c41@unibe.ch \
    --to=ntg-context@ntg.nl \
    --cc=denis.maier@unibe.ch \
    --cc=mseven@telus.net \
    /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).