ragged2e 命令后以“加号”开头的文本会阻止编译

ragged2e 命令后以“加号”开头的文本会阻止编译

由于一些奇怪的错误(可能源于一个ragged2e错误,但我不确定,所以我不会责怪任何人),我浪费了相当多的时间,所以我认为分享这个会很好。

ragged2e包定义了诸如 之类的命令\Centering,可以替代通常的对齐命令,并在 之类的有趣环境中工作\pbox。然而,在使用\Centering几十次之后,我偶然发现了一个导致错误的非常特殊的情况。

这很好用:

\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{ragged2e}

\begin{document}

\Centering%
Some random words.

\end{document}

但是,如果命令后的文本\Centering以“加号”(不区分大小写)开头,我会收到“缺少数字”错误:

\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{ragged2e}

\begin{document}

\Centering%
Plus some random words.

\end{document}

该问题似乎出现在其他命令中,例如\RaggedRight

根据我得到的结果texdoc,我正在v2.1使用ragged2e

答案1

有趣的错误。宏以以下定义\Centering结尾:\@raggedtwoe@everyselectfont

% ragged2e.sty, line 191:
\newcommand{\@raggedtwoe@everyselectfont}{%
  \if@raggedtwoe@spaceskip
    \ifdim\fontdimen\thr@@\font=\z@\relax
      \spaceskip\z@
    \else
      \spaceskip\fontdimen\tw@\font
    \fi
  \else
    \spaceskip\z@
  \fi
  }

由于\spaceskip是胶水参数,它将期待可能plusminus规格。

使固定:

\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{ragged2e}
\usepackage{etoolbox}

\makeatletter
\appto\@raggedtwoe@everyselectfont{\relax}
\makeatother

\begin{document}

\Centering
Plus some random words.

\end{document}

附加内容\relax将停止搜索胶水规格。

答案2

这些命令似乎将“加号”解释为“ plus ⟨length⟩ minus ⟨length⟩”结构的开头,以赋予长度拉伸值。\relax在这里添加一个似乎可以解决问题。

\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{ragged2e}

\begin{document}

\Centering \relax%
Plus some random words.

\end{document}

在命令和文本之间留一个空行也许可行,但我认为这样不太紧凑。

相关内容