在 ConTeXt 中使用类似 Babel 的简写

在 ConTeXt 中使用类似 Babel 的简写

我是 ConTeXt 的新手,我对它的功能感到非常兴奋。但是,当我尝试用俄语制作一份漂亮的文档时,我发现 ConTeXt 似乎没有提供 Babel 简写,而 (Lua/Xe/pdf)LaTeX 曾经提供过这样的功能:

% pdfLaTeX code
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[russian]{babel}
\begin{document}
"--* Прямая речь "--- "<после "`тире"' неразрывный пробел">.    
\end{document}

上述代码包含一个直接引号破折号、一个西里尔字母破折号和两种类型的引号,并产生: pdfLaTeX 代码

毫不奇怪,ConTeXt 不识别这些简写:

% ConTeXt code
\mainlanguage[russian]
\setupbodyfont[libertine]
\starttext
"--* Прямая речь "--- "<после "`тире"' неразрывный пробел">.
\stoptext

ConTeXt 代码

虽然引号可以用相应的字体字符 (« » „ ¯) 替换,但特定的西里尔破折号"---(比长破折号短,并且周围有固定的空格,左侧有不间断的空格)不能,而且我还没有找到输入或实现它的方法。

有没有办法启用 Babel 速记或在 ConTeXt 中实现其功能?

(谢谢,新年快乐!)

UPD1:我发现定义\cyrdash符号的更好的方法是这样的

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

"---Babel 中的定义如下:

\def\@Acdash{\ifdim\lastskip>\z@\unskip\nobreak\hskip.2em\fi
  \cyrdash\hskip.2em\ignorespaces}%

UPD2:我能够使用translate模块重新创建所需的行为:

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

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

\mainlanguage[russian]
\setupbodyfont[dejavu]
\starttext\enableinputtranslation 
"--* Прямая речь "--- \quotation{после \quote{тире} неразрывный пробел}.    
\stoptext

带有翻译模块的 ConTeXt 代码

(非常感谢@Aditya 的建议)

答案1

对于引文,您可以使用:

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

或者(如你所说)直接输入:

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

这是一个简单的例子:

\mainlanguage[ru]
\setupbodyfont[dejavu]
\starttext
\quotation{после \quote{тире} неразрывный пробел}.    

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

这使:

在此处输入图片描述

对于破折号,您可以使用复合词:|<||=|。默认情况下,它们不留任何空格,但可以按如下方式进行修改:

\define\cyrdash{\hbox to.8em{--\hss--}}
\unprotect
\setuplanguage
  [\s!ru]
  [
    \c!midsentence=\cyrdash,
    \c!leftsentence=\cyrdash,
    \c!rightsentence=\cyrdash,
  ]
\def\beginofsubsentencespacing{\thinspace}
\def\endofsubsentencespacing{\thinspace}

% Redefine |=|
\definetextmodediscretionary =
  {\endofsubsentencespacing\prewordbreak\midsentence\beginofsubsentencespacing\prewordbreak} 
\protect

\mainlanguage[ru]
\setupbodyfont[dejavu]

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

这使

在此处输入图片描述

编辑:根据您想要的确切定义,您可以重新定义|<|and |=|(或者甚至可以创建新的 and 来代替<and =)。例如:

\define\cyrdash{\dontleavehmode\scale[sx=0.80]{---}}  
% Redefine |=|
\definetextmodediscretionary =
  {\leavevmode\cyrdash\hskip.35em}

% Redefine |<|
\definetextmodediscretionary <
  {\removeunwantedspaces\thinspace\cyrdash\thinspace\ignorespaces}

请注意,其\thinspace定义(大致)为:\kern<amount>,因此它是不可破坏的。如果您想要可破坏的空间,请使用\hskip<amount>

相关内容