I'm new to ConTeXt, and I feel very excited about its capabilities. But as soon as I've tried to make a handsome document in Russian, I've learned that ConTeXt doesn't seem to provide Babel-shorthands as (Lua/Xe/pdf)LaTeX have used to:

% pdfLaTeX code
"--* Прямая речь "--- "<после "`тире"' неразрывный пробел">.    

The code above contains a direct speech dash, a Cyrillic em-dash and two types of quote marks, and produces: pdfLaTeX code

Unsurprisingly, ConTeXt recognizes none of those shorthands:

% ConTeXt code
"--* Прямая речь "--- "<после "`тире"' неразрывный пробел">.

ConTeXt code

While quote marks can be substituted with corresponding font characters (« » „ ‟) , the specific Cyrillic dash "--- (which is shorter than em-dash, and has fixed spaces around it with non-breaking one at left side) can't be, and I've yet to figure out a way of typing or implementing it.

Is there a way of enabling Babel shorthands or implementing their functionality in ConTeXt?

(Thanks and Happy New Year!)

UPD1: I've found that a nicer way to define \cyrdash symbol would be something like

\define\cyrdash{\scale[sx=0.9]{---}} % produces a smoother dash

Also here's how "--- is defined in Babel:


UPD2: I was able to recreate the desired behavior with translate module:

\define\cyrdash{\scale[sx=0.80]{---}}  % Cyrillic dash sign

\translateinput["---][\unskip\thinspace\cyrdash\thinspace\ignorespaces] % Cyrillic text em-dash
\translateinput["--*][\leavevmode\cyrdash\hskip.35em] % Cyrillic direct speech dash

"--* Прямая речь "--- \quotation{после \quote{тире} неразрывный пробел}.    

ConTeXt code with translate module

(Many thanks to @Aditya for suggestions)


1 Answer 1


For the quotes, you can either use:

\quotation{после \quote{тире} неразрывный пробел}.    

or (as you note) directly type:

«после „тире” неразрывный пробел».

Here is a minimal example:

\quotation{после \quote{тире} неразрывный пробел}.    

«после „тире” неразрывный пробел».

which gives:

enter image description here

For the em-dashes, you can use compound words: |<| and |=|. By default, they do not leave any space, but that can be modified as follows:

\define\cyrdash{\hbox to.8em{--\hss--}}

% Redefine |=|
\definetextmodediscretionary =


|=|Прямая речь|<|\quotation{после \quote{тире} неразрывный пробел}.    

which gives

enter image description here

EDIT: Depending on the exact definitions that you want, you can redefine |<| and |=| (or even create new ones instead of < and =). For example:

% Redefine |=|
\definetextmodediscretionary =

% Redefine |<|
\definetextmodediscretionary <

Note that \thinspace is defined (roughly) as: \kern<amount>, so it is unbreakable. If you want breakable space, use \hskip<amount>.

  • As the example shows, "--- typesets a shorter dash than the em-dash, with thin (non-breaking) spaces on either side; with "--* the same dash is used, but only spaced at the right.
    – egreg
    Jan 1, 2016 at 23:12
  • @egreg: See my updated answer. I copied the definition of \cyrdash from another answer; I am guessing that the spaces should be \thinspace; if not, that can be changed appropriately.
    – Aditya
    Jan 2, 2016 at 0:10
  • @Aditya thank you very much, great take on quotes, but this modified compound word thing still doesn't leave the space? And also I was a bit wrong: "--- has a fixed non-breaking space at its left and breakable fixed space (of the same width) at its right. Could you modify the code accordingly, please?
    – The_Keeper
    Jan 2, 2016 at 0:19
  • @Aditya: I've figured that |=| does seem to behave like "---. Did you mean using |<| as "--* and |=| as "---?
    – The_Keeper
    Jan 2, 2016 at 0:35
  • @Aditya: also |=| doesn't seem to suppress source whitespaces (which might be inconvenient). I've updated the question with implementation of this dash in babel, I hope that might be helpful.
    – The_Keeper
    Jan 2, 2016 at 1:03

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .