Non-breaking space unavailable between initials and names
I could not find how to insert an non-breaking space between an initial and a name (eg A. Smith). initialize-with=". " doesn't work. It seems that a normal space is inserted by default after the initial (or the point here). Could someone help ? Many thanks in advance.
My csl :
<macro name="author">
<names variable="author">
<name delimiter=", " form="long" delimiter-precedes-last="never" initialize-with=". " and="text">
<name-part name="family" font-variant="small-caps" />
</name>
My csl :
<macro name="author">
<names variable="author">
<name delimiter=", " form="long" delimiter-precedes-last="never" initialize-with=". " and="text">
<name-part name="family" font-variant="small-caps" />
</name>
What is this required for?
Where are the requirements for this stated? It's not a general rule, see e.g ref [3] on p. 7 of the IEEE manual
http://www.ieee.org/documents/stylemanual.pdf
I can bring it up, but it won't happen quickly, unless this is a generally accepted rule in French typography, in which case we _might_ be able to put it into the processor without a spec change.
NBSp seem to be particularly prominent in French typography, this pretty much never comes up in English, either side of the ocean.
[and it would be great to make the delimiter customizable (localizable) in a future csl release.]
I would suggest to work on the function : initialize-with=".", but there may be a conflict with the default space inserted after a full first name.
To be clear again, the idea is to prevent both :
a. this visual result with consecutive notes :
1. A._Smith,
2. A.___Bull,
3. A.__John,
(spaces somehow exaggerated here)
b. a cut after the first name at the end of the line, ie : A.
Smith
It's very common to have A.S. Smith (i.e. no space between initials) and we get this with initialize-with="." so this needs to be defined separately.
<locale xml:lang="ru">
<terms>
...
<term initial-last-name-delimiter=""/>
</terms>
</locale>
...
<macro name="author">
<names variable="author">
<name name-as-sort-order="all" sort-separator=" " initialize-with=". " delimiter=", " delimiter-precedes-last="always"/>
<label form="short" prefix=" " text-case="lowercase"/>
</names>
</macro>
initialize-with and prefix in lable contain non breaking space as "160"
I'd be grateful if you tell me what do I do wrong.
As I see, it's impossible for now, is it?
Before diving in with an outline of the issues and a proposal, I should check up on the appropriate forum, since there will likely be some back-and-forth in the discussion.
@adamsmith: Is it okay to post initially here, or would you prefer to have a proposal directly on the ticket linked above?
Here's a run-down:
(1) In initialize-with, the non-breaking spaces &#xFEFF; and &#x00A0; are always retained for inter-initials joins, in all locales.
(2) In the fr and ru domains only, for non-sort-ordering names only, the presence of &#xFEFF; or &#x00A0; in initialize-with will cause a normal non-breaking space (&#x00A0;) to be used for the join between initials and first word of the family name.
To make use of the new functionality, just set the non-breaking space to be used for inter-initials joins in initialize-with (i.e. for the join between the "A." and the "P." in "A.P. Herbert"), and things should just work when the style is run in a French or Russian locale.
The only change from current behaviour (apart from covering the French and Russian use cases) is that initials in styles that use one of the non-breaking spaces in initialize-with will be clustered together in non-Russian, non-French locales. That seems useful and low-impact, but if that is not desired, we can revert to ordinary space (or no-space) for inter-initials joins in the other locales.
It would be better for the implicit use of &#x00A0; as the initials-to-name join to be controlled in the locale. In the next version of CSL, a boolean cs:style-options attribute could be introduced for that purpose; but this should hold things together for the present.
so we'd have
initial-name-delimiter=" "
(The current status)initial-name-delimiter="&#160;"
(nbsp)initial-name-delimiter=""
no space at all (not sure if that exists, but once we have the option, why restrict it.)and so on.
join-non-break-initials-with-non-break-space="true"
You could use both approaches, so that joins are set with two name attributes (one for initial-initial, another for initial-familyName), and the "degrading" of non-breaking spaces to breaking counterparts is controlled with a locale setting.
That would make things a bit cluttered, but it might not be too bad, since the locale setting, at least, would almost never be touched.
If clutter is an issue, the joins could all be moved into the locale, if styles are assumed to be internally consistent on that. That might be kinda risky though, since it would be hard to ramp up flexibility if unexpected use cases crop up later.
* are there cases where initials should be separated by non-breaking spaces, but the last initial and family name with a regular space? Or vice versa (regular spaces between initials, but non-breaking space between last initial and family name)? If we can rule out either case, things get a little easier.
* are there cases where family names that consist of multiple parts should also contain non-breaking spaces (e.g. in "J. le Carre", between "le" and "Carre")?