重新定义俄罗斯冲刺,使其后拥有牢不可破的空间

重新定义俄罗斯冲刺,使其后拥有牢不可破的空间

通过调用俄文破折号,"---它前面有不可打破的空格,而有时我希望它后面也有不可打破的空格,例如,如果它前面有一个数字,就像... "--- 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 ... \makeatotherafter内\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}

生产

在此处输入图片描述

相关内容