如何删除重音符号(变音符号)?

如何删除重音符号(变音符号)?

我正在尝试转换一些带重音字母的字符串。我希望能够只删除重音符号,同时保留字母。(例如将 ô 转换为 o,这样 Hôspital 就会变成 Hosiptal)。

实现这一目标的最佳方法是什么?

我可以这样做

\documentclass{article}
\usepackage[T1]{fontenc}

\ExplSyntaxOn
\tl_new:N  \l_accented_tl
\cs_generate_variant:Nn \regex_replace_all:nnN { neN }
\seq_set_from_clist:Nn \g_my_seq { é , è , ê , à , â , ô , ö, î , ï , ç , É , È , Ê , À , Â , Ô , Ö , Î , Ï , Ç }
\prop_const_from_keyval:Nn \g_my_pl  {
    é = e , è = e , ê = e ,
    à = a , â = a ,
    ô = o , ö = o ,
    î = i , ï = i , ç = c , 
    É = E , È = E , Ê = E ,
    À = A , Â = A ,
    Ô = o , Ö = O , 
    Î = I , Ï = I , Ç = C }

\NewDocumentCommand{\remove}{ m }
 {
    \tl_set:Nn \l_accented_tl { #1 }
    \seq_map_inline:Nn \g_my_seq
      {
        \regex_replace_all:neN { ##1 } { \prop_item:Nn \g_my_pl { ##1 } } \l_accented_tl
      }
    \tl_use:N \l_accented_tl
 }
\ExplSyntaxOff
\begin{document}
\remove{Hörmander}, \remove{Hôspital} 
\end{document}

是否有可能通过类似

\tl_set:Nn \l_accented_tl { #1 }
    \regex_replace_all:nnN { (é)|(è)|(à)|(ç) } { (?1:e)|(?2:e)|(?3:a)|(?4:c) } \l_accented_tl
\tl_use:N \l_accented_tl

或更好?

答案1

如果您使用 pdflatex,那么这非常简单:只需(本地)将重音宏重新定义为无操作。

\documentclass{article}

\makeatletter
\newcommand{\removeaccents}[1]{%
  \begingroup
  \let\'\@firstofone
  \let\`\@firstofone
  \let\^\@firstofone
  \let\"\@firstofone
  % add the other accent commands you need
  #1
  \endgroup
}
\makeatother

\begin{document}

\removeaccents{Hörmander}

\removeaccents{Hôpital}

\end{document}

在此处输入图片描述

哦,顺便说一句,“Hôspital” 是错的:它要么是“Hospital”,要么是“Hôpital”。这位著名的侯爵使用了后者的拼写。

相关内容