[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