Le 02/10/14 à 09h22, Ulrike Fischer <[log in to unmask]> a écrit :
> Am Wed, 1 Oct 2014 17:39:46 +0200 schrieb
>> Now I see what you mean and I agree with you. But I guess I'd choose the
>> second case between the two following cases:
>>
>> 1. deliberately providing a many-to-one relation between keys and value,
>> and writing code that ensures all these values of all theses *number*
>> keys lead to the single issue's number,
>> 2. be careful in providing a one-to-one relation between a single
>> "number" key and issue's number value, and being able to specify that
>> this key is required.
>
> That was what I meant with that you need to be careful to define and
> use "basic keys".
Did I give the impression I was going to define complex keys? That's
already fairly complicated with simple ones! ;)
> Beside this there is also the timing problem Joseph mentioned: when
> should be tested if a key has been used? It is obviously not the key
> code of the key that can do it.
No, but as answered to Joseph, a `.required:' key property could
automatically check at the end of document (\AtEndDocument) that the
corresponding key has been used and, if not, emit an error message.
> So imho you are not looking for a .required property but
> a .enableifsettest property which adds and sets some boolean which you
> can later check.
I'm not sure to understand well such a .enableifsettest property, but
I guess that's what I'm currently doing by hands:
--8<---------------cut here---------------start------------->8---
\msg_new:nnnn{journal}{issue-number-needed}{Option~`#1'~needed!}
{Please~specify~`#1=<number>'.}
\int_new:N \l_journal_issue_number_int
\keys_define:nn { journal/issuesetup }
{
number .int_set:N = \l_journal_issue_number_int,
number .value_required:,
% [...]
}
\NewDocumentCommand{\issuesetup}{ m } {
\keys_set:nn { journal/issuesetup } { #1 }
% If `number' is not set, the corresponding integer value is 0.
\int_compare:nNnT {\l_journal_issue_number_int}<{1}
{
\int_set:Nn \l_journal_issue_number_int { \c_journal_first_issue_number_int }
\msg_warning:nnn{journal}{issue-number-needed}{number}
}
% [...]
}
% [...]
--8<---------------cut here---------------end--------------->8---
I must admit, checking the `number' key has been used only
\AtEndDocument would be too late in this case.
Maybe that's what you meant with `.enableifsettest': what I would need
here is, for each ⟨key⟩ tagged as required by, say, a `.required:'
property, a corresponding (/TF/ for `T', `F' or `TF'):
┌────
│ \keys_has_been_used:n/TF/ {⟨key⟩}
│ {⟨true code⟩} {⟨false code⟩}
└────
and, why not, a standardized (error? warning? etc.) message in `false'
case.
--
Denis
|