是否有可能有一个宏可以知道句子何时结束?以便能够自动将某些内容排版为大写或小写?
例如
\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
(在我的用例中是可以的),并且我觉得它不安全或者它不能覆盖所有情况,但我无法指出任何真正的问题。有人能发现任何问题吗?