Since weāre working on 1.1 now, I thought Iād resurrect this, though itās obviously been more than a decade since we discussed it!
Is there merit to this in 2020, and least to clarify the spec?
Since weāre working on 1.1 now, I thought Iād resurrect this, though itās obviously been more than a decade since we discussed it!
Is there merit to this in 2020, and least to clarify the spec?
What exactly? This thread discussed removing substitute, universal suppression of repeated variables, style attributes on groups, second field align, and other things.
Itās hard to follow the discussion because the switch to Discourse has mangled the style coding.
For the question of removing substitute
āno, the compact syntax and inheritance of name formatting parameters is incredibly useful, and most CSL styles are written with it. It would be a monumental task to remove substitute, and I think it has a lot of good coding value.
For the question of general suppression of repeated elements, that seems potentially reasonable. That would be a backwards compatible change I thinkāmost styles have been written to do this suppression manually, those would still work I think? If a variable is suppressed by substitute
, it still tests as non-empty in if
, so existing styles would still work as expected, but future styles and revisions could be written assuming that a variable is only rendered once. The one case that comes to mind where a variable is often printed twice is dates, where it is common, for example, to print the year early in a reference, then include the month and day later in the reference for some types. Dates should be an exception to general suppression (an alternative would be to suppress date parts individually, but that seems as much extra work on processorsā part and more difficult for users and style coders).
I think that the label style discussion is a bit misleading here. āHiattā shouldnāt be understood as an author but as citation-label
. These cases would best be handled by adding a citation-label syntax to styles. Variables included in the construction of citation-label
would not have any suppression applied to them.
I donāt know enough about specifics of alignment Needs to weigh in there at the moment.
Sorry; I only meant about the main subject; dropping substitute.
And as I said, at minimum, the idea could help clarify the spec.
I donāt think we should drop substitute. We could consider adding general āonly-render-onceā logic.
Lgtm. But we should add an escaping mechanism. force="true"
or similar.
Or an attribute to be set on the first rendering 9f a variable suppress-next="false"
I think the force=ātrueā syntax is clearer? But what is an actual use case for one of these?
And the behavior would be default?
Does the form + related issue complicate this?
Hmm, yeah, with main/sub as forms that does create an issue. Suppression would need to not apply when form=āsubā is used. But that becomes messy when, for example a title macro is substituted for an author in substitute
. If the macro includes main and sub title, then the sub title should be suppressed later.
related I donāt think is much of a problem. The spec should state that suppression only occurs within each context (base, original, reviewed, etc.).
Universal once-only suppression would require at least two exceptions then:
Starting to seem like more trouble than itās worth
I was thinking about label style citation styles. But probably the same result can be achieved with citation-label
as well, if variables used in a label are exempted from general suppression.
How should short forms be handled? Iād say they should not be suppressed.
Maybe just add a new condition If seen="title
form=ālongā match=ānoneā`?
Maybe just add a new condition
if seen="title" form="ong" match="none"
?
If processors automatically suppress variables from showing a second time, there would need to be an attribute to override that explicitly by users or automatically for relevant cases. It might work
form="main"
or form="sub"
are only suppressed if that form, full, or short, has appeared previously (essentially, treat title-main
and title-sub
as separate variables)How should short forms be handled? Iād say they should not be suppressed.
Long and short forms are rarely rendered together both in the same citation/bibliography, so Iād say they should be suppressed.
There are styles that, on position="first"
, indicate the short title after the full title in parentheses. So here we really need something like force="true"
.
ā¦ or styles that append the short title in square brackets at the end of bibliography entries.
For universal once-only suppression: there are cases of author-year styles which require the author year string as used in the in-text citations to be prepended to the bibliography entry. Thatās a systematic repetition of rendered variables.
For universal once-only suppression: there are cases of author-year styles which require the author year string as used in the in-text citations to be prepended to the bibliography entry. Thatās a systematic repetition of rendered variables.
Thatās citation-label
.
Iām not following. Can you give an example?
cs:substitute
does three things:
These are separate points. Thereās no advantage I can see to removing the first one: itās a convenience with obvious usefulness. Nor the third, which I think is required.
As to the second, I think itās better to think of a number of other questions
I donāt have an answer to 1 or 2: the correct answer is to do whatever will be most generally useful. Itās surely clear, however, that the answer to (3) is āyesā. What, then, are the options:
(a) A syntax to force printing of a variable even if it has already been output. Two mechanisms spring to mind:
force="true"
attribute that can be set on anything that outputs a variable (cs:names
, cs:number
, cs:text
, cs:date
) which will guarantee that it is printed even if it otherwise wouldnāt be.(b) A syntax to unsuppress a variable, which could be set when it is output and would prevent it from being suppressed (e.g. `suppress=āneverā).
Ā© A test which could easily be applied to any variable (e.g. already-output
).
Probably (a) or (b) would be easier to implement than Ā©, which would require one to track both suppression (through substitute) and outputting (in other contexts).
One could have something like:
force="true"
is set.text
will be force="true"
. The default for other nodes is force="false"
The āsuppressionā behaviour of substitute is then no longer needed (itās just ābusiness as usualā), but the inheritance behaviour and early termination are retained.