我的文字编辑工作主要是发现拼写错误。我有一些由字符串组成的拼写错误,例如“ .
”、“”、“ ,
”、“ :
”...(标点符号前的空格),我们在文本模式下认为这些拼写错误(例如“as follow :”),但在内联数学或数学环境中则不是问题(例如“$\mu .$”)。
通常我们使用自定义 emacs 的查询替换正则表达式来查找和纠正这些拼写错误,但是,由于 emacs 不区分数学模式和文本模式(我知道,我可以使用一些技巧来做到这一点,但这不是一个强大的解决方案),我通常会有很多误报(这非常无聊)。
我想知道是否有原生的 LaTeX 解决方案可以做到这一点。我的意思不是查询替换,而是突出显示一些匹配的字符串。
例如,我找到了该xesearch
包,但它不处理标点符号搜索。
以下是 MWE:
\documentclass[11pt]{article}
\pagestyle{empty}
\begin{document}
Punctuation , typos .
No problem with this string
\begin{equation}
(\mu + \nu) ,
\end{equation}
\end{document}
我也发现了,l3regex
但我认为它对 LaTeX 代码执行正则表达式,而不是对预格式化的代码执行正则xesearch
表达式。
欢迎任何提示、建议或有用的想法。
编辑。正如我在评论中回答的那样:“我要求一种技术来区分数学模式中的字符串和文本模式中的字符串,并仅突出显示第二个字符串”。
编辑2。我移动并在此处发布了相关问题:XeTeXinterchartoks:为什么“\eqref”和(\ref{…})布局中的“)”的解释不同?
答案1
您可以使用 xelatex 和\XeTeXinterchartoks
:
\documentclass[11pt]{article}
%
\usepackage{xcolor}
\newXeTeXintercharclass\mypunctclass
\XeTeXcharclass `\. \mypunctclass
\XeTeXcharclass `\, \mypunctclass
\XeTeXinterchartokenstate=1
\XeTeXinterchartoks 4095 \mypunctclass{\textcolor{red}{TYPO}}
\pagestyle{empty}
\begin{document}
Punctuation , typos .
Punctuation, typos.
No problem with this string
\begin{equation}
(\mu + \nu) ,
\end{equation}
\end{document}
答案2
为了遵循卡莱尔的传统,我将其命名为“宝石” \z
。这里已为逗号、句号和冒号完成,但可以为其他测试设置附加循环。
如果我没有提请您注意 Ulrike 的评论,我会很失职,并指出 有很多陷阱\z
。例如verbatim
,材料以及有效参数列表中出现的违规语法都可能会导致编译错误。
已编辑,因此当有问题的位落在环境内时,它现在可以工作align
。 我不会动态输出各部分(如果有问题的位落在参数内,则会导致问题),而是创建一个连接,其中\def
每个.
等都被替换为\ifmmode{} .\else\colorbox{cyan}{ .}\fi
内部的\def
。 只有在最后,def
ed 宏才会被重新命名。 [仅出于完整性考虑,可以通过定义而不是修订来\z@save
获得原始行为]\newcommand\zz@[1]{#1}
\newcommand\zz@[1]{\g@addto@macro\z@save{#1}}
\documentclass[11pt]{article}
\usepackage{xcolor,amsmath}
\makeatletter
\newcommand\z[1]{\def\z@save{}\z@A#1 ,\z@end\z@save}
\long\def\z@A#1 ,#2\z@end{%
\z@B#1 .\z@end%
\ifx\z@end#2\else\zz@{\ifmmode{} ,\else\colorbox{cyan}{ ,}\fi}\z@A#2\z@end\fi}
\long\def\z@B#1 .#2\z@end{%
\z@C#1 :\z@end%
\ifx\z@end#2\else\zz@{\ifmmode{} .\else\colorbox{orange}{ .}\fi}\z@B#2\z@end\fi}
\long\def\z@C#1 :#2\z@end{%
\zz@{#1}%
\ifx\z@end#2\else\zz@{\ifmmode{} :\else\colorbox{yellow}{ :}\fi}\z@C#2\z@end\fi}
\newcommand\zz@[1]{\g@addto@macro\z@save{#1}}
\makeatother
\pagestyle{empty}
\begin{document}
\z{
Punctuation , typos : such as 3 .75 and such .
No problem with this string
\begin{equation}
(3 .7\mu + \nu) ,
\end{equation}
\begin{align}
\mathcal{A}_{\text{reg}}:\qquad ( - l_u/2+\epsilon_u , - l_\phi/2+\epsilon_\phi )
\rightarrow ( l_u/2-\epsilon_u , l_\phi/2-\epsilon_\phi )\,. \end{align}
And again , are there these problems : a nd b .
}
\end{document}