From: Benjamin Buchmuller via ntg-context <ntg-context@ntg.nl>
To: Hans Hagen <j.hagen@xs4all.nl>
Cc: Benjamin Buchmuller <benjamin.buchmuller@gmail.com>,
mailing list for ConTeXt users <ntg-context@ntg.nl>
Subject: Re: Title for tabulate
Date: Thu, 16 Dec 2021 11:39:47 +0100 [thread overview]
Message-ID: <19428D06-E2FB-4D19-85EE-34EB76E91EBE@gmail.com> (raw)
In-Reply-To: <47071b31-2e4d-2a05-8438-48896d9f4930@xs4all.nl>
Thanks again, Hans, for all the different approaches, very instructive!
However, after playing around a bit, I do have a question that I can't work out:
\getdummyparameters[headtitle=,#1]
\ifempty{\dummyparameter{headtitle}}
will never be true? See below in context:
> On Dec 14, 2021, at 19:16, Hans Hagen <j.hagen@xs4all.nl> wrote:
>
> On 12/14/2021 6:16 PM, Benjamin Buchmuller via ntg-context wrote:
>> Hi!
>> I'd like to follow up on a problem that Denis came across recently with the titles argument in tabulate. (It's more a solution than a question, but any hints to improve the answer are welcome.) I wanted to use this argument for an easy specification of, well, a title for a "recipe". The advantage is that all information is held together and it's easy to use for people who are not (too) familiar with ConTeXt.
>> So, in one file I can define all styles (which the end-user would not need to see):
>> \definetabulate[recipe][|l|l|p|l|]
>> \setuptabulate
>> [recipe]
>> [
>> bodyfont=small,
>> distance=medium,
>> before={\blank[back, small]},
>> header=text,
>> headstyle=\bi, % this formats the "\BC" cells
>> headcolor=red, % this formats the "\BC" cells
>> ]
>> \starttext
>> And then use:
>> \startrecipe[title={Whatever mixture 1}]
>> \FL
>> \NC Absolute \BC Stock \NC Ingredient \NC Final \NR
>> \HL
>> \NC 1 \NR
>> \LL
>> \stoprecipe
>> \startrecipe[title={Whatever mixture 2}]
>> \FL
>> \BC Absolute \BC Stock \BC Ingredient \BC Final \NR
>> \HL
>> \NC 1 \NR
>> \LL
>> \stoprecipe
>> \stoptext
>> etc.
>> However, I cannot change the way the title is styled (or spaced from the table) unless I do "title={\bi Some text.}". However, blank commands are also stripped off at this place. (I also don't get a clue from the source if there is any argument to spike-in some formatting.)
>> So, if there is no easy way to access this one, we can work around:
>> \definetabulate[recipetab][|l|l|p|l|]
>> \setuptabulate
>> [recipetab]
>> [
>> bodyfont=small,
>> distance=medium,
>> before={\blank[back, small]},
>> % header=text, % THIS MUST NOT BE "text"
>> headstyle=bold,
>> headcolor=red,
>> ]
>> \define\startrecipe{\dodoubleempty\dostartrecipe}
>> \long\def\dostartrecipe[#1][#2]#3\stoprecipe{%
>> \iffirstargument
>> {\bi #1}\blank[medium]
>> \fi
>> \ifsecondargument
>> \startrecipetab[#2]
>> #3
>> \stoprecipetab
>> \else
>> \startrecipetab
>> #3
>> \stoprecipetab
>> \fi
>> }
>> \startrecipe[Head 1]
>> \FL
>> \BC Absolute \BC Stock \BC Ingredient \BC Final \NR
>> \HL
>> \NC 1 \NR
>> \LL
>> \stoprecipe
>> \startrecipe[Head 2][headcolor=blue] % pass on arguments to tabulate
>> \FL
>> \BC Absolute \BC Stock \BC Ingredient \BC Final \NR
>> \HL
>> \NC 1 \NR
>> \LL
>> \stoprecipe
>> Small question though: Is there a ConTeXt way to "\long\def" or a simple way ("user interface") to filter a list of arguments for a specific key=val pair, e.g. to make a single optional argument with headertitle={Some header.}?
> context has no (need for) \long ... all is long (i mever saw a reason for using it)
>
> (1) use a proper head:
>
> \definehead[RecipeHead][subsubsubsubsubsubject]
> \setuphead [RecipeHead][style=bolditalic,after={\blank[medium]}]
>
> \definetabulate[recipetab][|l|l|p|l|]
>
> \setuptabulate
> [recipetab]
> [bodyfont=small,
> distance=medium,
> before={\blank[back, small]},
> headstyle=bold,
> headcolor=red]
>
> here's a one-step lmtx solution:
>
> \let\stoprecipe\relax
>
> \tolerant\protected\def\startrecipe[#1]#*[#2]#3\stoprecipe
> {\ifcstok{#1}\emptytoks\else
> \RecipeHead{#1}
> \fi
> \ifcstok{#2}\emptytoks
> \startrecipetab#3\stoprecipetab
> \else
> \startrecipetab[#2]#3\stoprecipetab
> \fi}
>
> or just
>
> \tolerant\protected\def\startrecipe[#1]#*[#2]#3\stoprecipe
> {\ifempty{#1}\else
> \RecipeHead{#1}
> \fi
> \ifempty{#2}%
> \startrecipetab#3\stoprecipetab
> \else
> \startrecipetab[#2]#3\stoprecipetab
> \fi}
>
>
> and here's one that does what you ask (in the core i'd try to avoid grabbing too much arguments and if real core we'd make sure dummy parameters don;t interfere):
>
> \tolerant\protected\def\startrecipe[#1]#2\stoprecipe
> {\ifempty{#1}%
> \startrecipetab#2\stoprecipetab
> \orelse\ifhastok={#1}%
> \getdummyparameters[headtitle=,#1]
> \ifempty{\dummyparameter{headtitle}}\else
> \normalexpanded{\RecipeHead{\dummyparameter{headtitle}}}
> \fi
> \startrecipetab[#1]#2\stoprecipetab
> \else
> \RecipeHead{#1}
> \startrecipetab#2\stoprecipetab
> \fi}
>
> \startrecipe[headtitle={Head 3},headcolor=blue] % pass on arguments to tabulate
> \FL
> \BC Absolute \BC Stock \BC Ingredient \BC Final \NR
> \HL
> \NC 1 \NR
> \LL
> \stoprecipe
Consider:
\startrecipe[headcolor=darkyellow] % pass on arguments to tabulate
\FL
\BC Absolute \BC Stock \BC Ingredient \BC Final \NR
\HL
\NC 1 \NR
\LL
\stoprecipe
This leaves a blank header line instead of none.
Complete example with XXXXX control:
\definehead[RecipeHead][subsubsubsubsubsubject]
\setuphead [RecipeHead][style=bolditalic,after={\blank[medium]}]
\definetabulate[recipetab][|l|l|p|l|]
\setuptabulate
[recipetab]
[bodyfont=small,
distance=medium,
before={\blank[back, small]},
headstyle=bold,
headcolor=red]
\let\stoprecipe\relax
\tolerant\protected\def\startrecipe[#1]#2\stoprecipe
{\ifempty{#1}%
\startrecipetab#2\stoprecipetab
\orelse\ifhastok={#1}%
\getdummyparameters[headtitle=,#1] % this should make headtitle by default empty, but doesn't?
\ifempty{\dummyparameter{headtitle}}XXXXX\else
\normalexpanded{\RecipeHead{\dummyparameter{headtitle}YYYY}}
\fi
\startrecipetab[#1]#2\stoprecipetab
\else
\RecipeHead{#1}
\startrecipetab#2\stoprecipetab
\fi}
some text
\startrecipe[headtitle={Head 3},headcolor=blue] % pass on arguments to tabulate
\FL
\BC Absolute \BC Stock \BC Ingredient \BC Final \NR
\HL
\NC 1 \NR
\LL
\stoprecipe
some text
\startrecipe[headcolor=darkyellow] % pass on arguments to tabulate
\FL
\BC Absolute \BC Stock \BC Ingredient \BC Final \NR
\HL
\NC 1 \NR
\LL
\stoprecipe
>
> Here's a variant:
>
> \def\theparameter#1#2%
> {\beginlocalcontrol
> \begingroup
> \getdummyparameters[#1=,#2]%
> \normalexpanded{\endgroup\endlocalcontrol\dummyparameter{#1}}}
>
> \tolerant\protected\def\startrecipe[#1]#2\stoprecipe
> {\ifempty{#1}%
> \startrecipetab#2\stoprecipetab
> \orelse\ifhastok={#1}%
> \edef\MyHeadTitle{\theparameter{headtitle}{#1}}%
> \ifempty\MyHeadTitle\else
> \normalexpanded{\RecipeHead{\MyHeadTitle}}
> \fi
> \startrecipetab[#1]#2\stoprecipetab
> \else
> \RecipeHead{#1}
> \startrecipetab#2\stoprecipetab
> \fi}
>
> or just
>
> \tolerant\protected\def\startrecipe[#1]#2\stoprecipe
> {\ifempty{#1}%
> \startrecipetab#2\stoprecipetab
> \else
> \edef\MyHeadTitle{\theparameter{headtitle}{#1}}%
> \ifempty\MyHeadTitle\else
> \normalexpanded{\RecipeHead{\MyHeadTitle}}
> \fi
> \startrecipetab[#1]#2\stoprecipetab
> \fi}
>
> or
>
> \tolerant\protected\def\startrecipe[#1]#2\stoprecipe
> {\ifempty{#1}%
> \startrecipetab#2\stoprecipetab
> \else
> \ifcstok{\theparameter{headtitle}{#1}}\emptytoks\else
> \normalexpanded{\RecipeHead{\theparameter{headtitle}{#1}}}
> \fi
> \startrecipetab[#1]#2\stoprecipetab
> \fi}
>
> or ... or ... or ...
>
> just play with it a bit till you have something that looks nice in code too
>
> Hans
>
> -----------------------------------------------------------------
> Hans Hagen | PRAGMA ADE
> Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
> tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl
> -----------------------------------------------------------------
___________________________________________________________________________________
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
___________________________________________________________________________________
next prev parent reply other threads:[~2021-12-16 10:39 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-12-14 17:16 Benjamin Buchmuller via ntg-context
2021-12-14 18:16 ` Hans Hagen via ntg-context
2021-12-16 10:39 ` Benjamin Buchmuller via ntg-context [this message]
2021-12-16 11:46 ` Hans Hagen via ntg-context
2021-12-17 7:25 ` Benjamin Buchmuller via ntg-context
2021-12-17 8:24 ` Hans Hagen via ntg-context
-- strict thread matches above, loose matches on Subject: below --
2021-11-28 8:15 Denis Maier via ntg-context
2021-11-28 11:40 ` Hans Hagen via ntg-context
2021-11-28 12:22 ` Denis Maier via ntg-context
2021-11-28 13:26 ` Hans Hagen via ntg-context
2021-11-30 11:41 ` Denis Maier 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=19428D06-E2FB-4D19-85EE-34EB76E91EBE@gmail.com \
--to=ntg-context@ntg.nl \
--cc=benjamin.buchmuller@gmail.com \
--cc=j.hagen@xs4all.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).