通过调用俄文破折号,"---
它前面有不可打破的空格,而有时我希望它后面也有不可打破的空格,例如,如果它前面有一个数字,就像... "--- 1
。
\cdash
为了实现这一点,我采用了from的定义babel
,并将其更改为
\def\cdash#1#2#3{\def\tempx@{#3}%
\def\tempa@{-}\def\tempb@{~}\def\tempc@{*}\def\tempd@{=}%
\ifx\tempx@\tempa@\@Acdash\else
\ifx\tempx@\tempb@\@Bcdash\else
\ifx\tempx@\tempc@\@Ccdash\else
\ifx\tempx@\tempd@\@Dcdash\else
\errmessage{Wrong usage of cdash}\fi\fi\fi\fi}
\def\@Acdash{\ifdim\lastskip>\z@\unskip\nobreak\hskip.2em\fi
\cyrdash\hskip.2em\ignorespaces}%
\def\@Bcdash{\leavevmode\ifdim\lastskip>\z@\unskip\fi
\nobreak\cyrdash\penalty\exhyphenpenalty\hskip\z@skip\ignorespaces}%
\def\@Ccdash{\leavevmode
\nobreak\cyrdash\nobreak\hskip.35em\ignorespaces}%
\def\@Dcdash{\ifdim\lastskip>\z@\unskip\nobreak\hskip.2em\fi
\cyrdash\nobreak\hskip.2em\ignorespaces}
我已经添加\ifx\tempx@\tempd@\@Dcdash\else
并定义
\def\@Dcdash{\ifdim\lastskip>\z@\unskip\nobreak\hskip.2em\fi
\cyrdash\nobreak\hskip.2em\ignorespaces}
所以现在"--=
应该与相同"---
,但具有牢不可破的空间。
但我收到以下错误
! Wrong usage of cdash.
\cdash ...\else \errmessage {Wrong usage of cdash}
\fi \fi \fi
l.38 ╨Я╤А╨╕╨▓╨╡╤В "--=
╨╝╨╕╤А
?
完整 MWE
\documentclass{article}
\usepackage{polyglossia}
\setmainlanguage[babelshorthands = true]{russian}
\defaultfontfeatures{Ligatures = TeX}
\newfontfamily{\cyrillicfont}{Georgia}
\makeatletter
\def\cdash#1#2#3{\def\tempx@{#3}%
\def\tempa@{-}\def\tempb@{~}\def\tempc@{*}\def\tempd@{=}%
\ifx\tempx@\tempa@\@Acdash\else
\ifx\tempx@\tempb@\@Bcdash\else
\ifx\tempx@\tempc@\@Ccdash\else
\ifx\tempx@\tempd@\@Dcdash\else
\errmessage{Wrong usage of cdash}\fi\fi\fi\fi}
\def\@Acdash{\ifdim\lastskip>\z@\unskip\nobreak\hskip.2em\fi
\cyrdash\hskip.2em\ignorespaces}%
\def\@Bcdash{\leavevmode\ifdim\lastskip>\z@\unskip\fi
\nobreak\cyrdash\penalty\exhyphenpenalty\hskip\z@skip\ignorespaces}%
\def\@Ccdash{\leavevmode
\nobreak\cyrdash\nobreak\hskip.35em\ignorespaces}%
\def\@Dcdash{\ifdim\lastskip>\z@\unskip\nobreak\hskip.2em\fi
\cyrdash\nobreak\hskip.2em\ignorespaces}
\makeatother
\usepackage{mathtools}
\begin{document}
\begin{minipage}{0pt}
Привет "--- мир
Привет "--= мир
\end{minipage}
\end{document}
编辑:将代码放在\makeatletter ... \makeatother
after内\begin{document}
解决了问题。这是由于 使babel
字符在文档开始后处于活动状态所致,因此我重新定义\cdash
了 。
答案1
将代码放在里面\makeatletter
和\makeatother
之后\begin{document}
可以解决问题。这是因为 babel 在文档开始之后激活字符,\AtBeginDocument
因此使用 \cdash 的重新定义被重新定义回来。
代码
\documentclass{article}
\usepackage{polyglossia}
\setmainlanguage[babelshorthands = true]{russian}
\defaultfontfeatures{Ligatures = TeX}
\newfontfamily{\cyrillicfont}{Georgia}
\usepackage{mathtools}
\makeatletter
\AtBeginDocument{
%
\renewcommand{\cdash}[3]{%
\def\tempx@{#3}%
\def\tempa@{-}%
\def\tempb@{~}%
\def\tempc@{*}%
\def\tempd@{=}%
%
\ifx\tempx@\tempa@\@Acdash\else%
\ifx\tempx@\tempb@\@Bcdash\else%
\ifx\tempx@\tempc@\@Ccdash\else%
\ifx\tempx@\tempd@\@Dcdash\else%
\errmessage{Wrong usage of cdash}%
\fi%
\fi%
\fi%
\fi}
%
\renewcommand{\@Acdash}{\ifdim\lastskip>\z@\unskip\nobreak\hskip.2em\fi
\cyrdash\hskip.2em\ignorespaces}%
%
\renewcommand{\@Bcdash}{\leavevmode\ifdim\lastskip>\z@\unskip\fi
\nobreak\cyrdash\penalty\exhyphenpenalty\hskip\z@skip\ignorespaces}%
\renewcommand{\@Ccdash}{\leavevmode
\nobreak\cyrdash\nobreak\hskip.35em\ignorespaces}%
\newcommand{\@Dcdash}{\ifdim\lastskip>\z@\unskip\nobreak\hskip.2em\fi
\cyrdash\nobreak\hskip.2em\ignorespaces}%
}
\makeatother
\begin{document}
\begin{minipage}{0pt}
Привет "--- мир
Привет "--= мир
\end{minipage}
\end{document}
生产