自动决定何时大写-可能吗?

自动决定何时大写-可能吗?

是否有可能有一个宏可以知道句子何时结束?以便能够自动将某些内容排版为大写或小写?

例如

\newcommand{\ciao}{\ifBeginOfSentence{Ciao}{ciao}}

以便

  • ...foo \ciao→ “再见”
  • ...foo. \ciao→ “foo。再见”

软件包 hep-paper.sty (l.1089ss) 中有一种解决方案。据我所知,它涉及强制\spacefactor段落分隔符处和句号后等处的已知值,然后在宏中查找该值。以下是使用的代码:

\RequirePackage[excludeor]{everyhook}
\newcommand{\begin@sentence}{1001}
\PushPostHook{par}{{\spacefactor=\begin@sentence}}
\def\frenchspacing{%
  \sfcode`\.\begin@sentence \sfcode`\?\begin@sentence
  \sfcode`\!\begin@sentence \sfcode`\:\begin@sentence
  \sfcode`\;\@m \sfcode`\,\@m
}
\newcommand{\if@begin@of@sentence}[2]{\leavevmode\protecting{%
  \ifboolexpr{ test {\ifnumcomp{\spacefactor}{=}{3000}} or%
               test {\ifnumcomp{\spacefactor}{=}{2000}} or%
               test {\ifnumcomp{\spacefactor}{=}{\begin@sentence}}%
  }{#1}{#2}%
}}

但是我认为它阻止了使用\frenchspacing(在我的用例中是可以的),并且我觉得它不安全或者它不能覆盖所有情况,但我无法指出任何真正的问题。有人能发现任何问题吗?

相关内容