[NTG-context] Quotation dash issues with semantic markup
Wolfgang Schuster
wolfgang.schuster.lists at gmail.com
Fri Jan 17 20:11:29 CET 2020
Hans Hagen schrieb am 30.12.2019 um 10:19:
> On 12/30/2019 5:03 AM, Sam May wrote:
>
>
> \setuplanguage[en]
> [leftquotation=\quotedash~,
> rightquotation=~\quotedash,
> leftsentence=\removeunwantedspaces~\endash\space,
> midsentence=\removeunwantedspaces~\endash\space,
> % leftsentence=\endash~,
> % midsentence=~\endash,
> rightsentence=~\endash]
> \define\quotedash{\emdash\endash}
>
> %\setupbackend[export=yes]
>
> \starttext
>
> \startsection[title=Introduction]
> Any of you able to help me get my quotation dashes into line when
> automatically
> inserted by the semantic commands? I'm sure a number of you look at
> this style
> and cringe, but \cap{A.} I'm not looking for grammatical input, and
> \cap{B.}
> I'm intending this for a non-English language where the quotation dash
> (though
> still not most common) isn't as out of place.
> \stopsection
>
> \startsection[title=Desired rendering]
> \quotedash~Speech should always have a dash at the start, but none at
> the end
> of a paragraph.
>
> \quotedash~Dialog asides should not duplicate dashes,~\endash\ he
> said.~\quotedash\ Also, this doesn't reflect the spacing mentioned in
> section
> \in[extra]. \quotedash~nor, as above, add ones at the end of paragraphs.
> \endash~he continued.
> \stopsection
>
> \startsection[title=Actual output]
> \speech{Speech should always have a dash at the start, but none at the
> end of a
> paragraph.}
>
> \speech{Dialog asides should not duplicate dashes, \aside{he said.}}
> Also, note
> the spacing isn't removed despite \type{\removeunwantedspaces}, but
> instead
> duplicated. \speech{nor, as above, add ones at the end of paragraphs.
> \aside{he continued.}}
> \stopsection
>
> \startsection[title=Additional considerations and
> observations,reference=extra]
> It would also be nice if a quote ending in a period carried the
> \quote{broad}
> spacing to the other side of the (ending) quote dash |=| the dash before
> \quote{Also} above would be packed on the left and broad on the right.
> I know
> this might be a lot trickier to code, and only consider it a bonus.
>
> The issue with \type{\removeunwantedspaces} only seems to affect the
> command
> forms. When inserted directly |<| as here |>| the spacing acts as
> desired in
> the \cap{PDF} (as expected, the \cap{XML} doesn't understand the
> order). Also,
> the right \type{|>|} doesn't require either of the explicit spacing
> instructions (beyond being non-breaking) while the others do; try
> switching the
> commented lines and re-rendering.
>
> The quotation dash itself only \emph{looks} as I want it; when I
> highlight and
> copy the text or export it to the \cap{XML} backend, it's still two
> dashes next
> to each other. Instead, I'd like it to be the Unicode bar U+2015.
> I'm not
> sure if \TEX/\LUATEX\ allows that difference between appearance and
> interaction
> (I do know \cap{PDF} does), so if there's some way of adding a new
> glyph to the
> font |<| one that mimics the other dashes even if the font changes |>|
> I'd love
> to actually use the proper codepoint. As is, that doesn't work in the
> standard
> font(s): [\char"2015].
> \stopsection
>
> \stoptext
>
> I bet that Wolfgang has the answers to the speech setup so I'll do the
> font part.
It's possible to use leaders to remove multiple dashes and also dashes
at the end of a paragraph but this will only work for the PDF. A
limitation is that you can't use the existing \speech and \aside
commands because they use groups which prevents the removal of unwanted
dashes.
\unprotect
\def\speech_dash
{\setbox\scratchbox\hbox{\texthorizontalbar\space}%
\leaders\copy\scratchbox\hskip\wd\scratchbox}
\def\speech_left
{\ifhmode
\removeunwantedspaces
\else
\dontleavehmode
\fi
\space\speech_dash}
\def\speech_right
{\removeunwantedspaces
\space\speech_dash}
%\define[1]\speech
% {\speech_left#1\speech_right}
\unexpanded\def\speech
{\speech_left
\bgroup
\aftergroup\speech_right
\let\next=}
\def\aside_dash
{\setbox\scratchbox\hbox{\endash\space}%
\leaders\copy\scratchbox\hskip\wd\scratchbox}
\def\aside_left
{\ifhmode
\removeunwantedspaces
\else
\dontleavehmode
\fi
\space\aside_dash}
\def\aside_right
{\space\aside_dash}
%\define[1]\aside
% {\aside_left#1\aside_right}
\unexpanded\def\aside
{\aside_left
\bgroup
\aftergroup\aside_right
\let\next=}
\protect
\setupbodyfont[pagella]
\starttext
\speech{first speech} \speech{second speech}
\speech{first speech} no speech \speech{second speech}
\speech{first speech\aside{aside}} \speech{second speech}
\speech{speech \aside{aside}} no speech
\stoptext
Wolfgang
More information about the ntg-context
mailing list