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

___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the 
Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki     : http://contextgarden.net
___________________________________________________________________________________

Reply via email to