我是 ConTeXt 的新手,我对它的功能感到非常兴奋。但是,当我尝试用俄语制作一份漂亮的文档时,我发现 ConTeXt 似乎没有提供 Babel 简写,而 (Lua/Xe/pdf)LaTeX 曾经提供过这样的功能:
% pdfLaTeX code
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[russian]{babel}
\begin{document}
"--* Прямая речь "--- "<после "`тире"' неразрывный пробел">.
\end{document}
上述代码包含一个直接引号破折号、一个西里尔字母破折号和两种类型的引号,并产生:
毫不奇怪,ConTeXt 不识别这些简写:
% ConTeXt code
\mainlanguage[russian]
\setupbodyfont[libertine]
\starttext
"--* Прямая речь "--- "<после "`тире"' неразрывный пробел">.
\stoptext
虽然引号可以用相应的字体字符 (« » „ ¯) 替换,但特定的西里尔破折号"---
(比长破折号短,并且周围有固定的空格,左侧有不间断的空格)不能,而且我还没有找到输入或实现它的方法。
有没有办法启用 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
(非常感谢@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>
。