自定义电子邮件宏

自定义电子邮件宏

我想定义一个执行以下操作的电子邮件宏:

输入:\domainemail{Jack Johnson}

输出:杰克·约翰逊

输出应该是一个突出显示的超链接,上面写着“mailto:[电子邮件保护]“。

我所拥有的是

\usepackage[colorlinks=true,allcolors=DarkBlue]{hyperref}
\newcommand{\domainemail}[1]{\href{mailto:#[email protected]}{#1}}

生成链接“mailto:Jack[电子邮件保护]

我怎样才能用句号代替空格,用小写字母代替大写字母?我尝试用 括起来,#1但这\lowercase似乎破坏了超链接。

奖金

\domainemail如果可以处理变音符号(包括 ß)以及多个名字和姓氏,则可以获得加分,例如

输入:\domainemail{Johnson-Löffler, Jack Björn}

输出:Johnson-Löffler,Jack Björn 带有超链接“mailto:[电子邮件保护]

答案1

代码的某些部分基于我的另一个答案。\addtranslations您可以为所需的 Unicode 字符设置所需的“翻译”。无论如何,对于非常奇怪的名称,您可以使用可选参数\domainemail

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{xparse}
\usepackage{hyperref}

\ExplSyntaxOn

\NewDocumentCommand{\addtranslations}{m}
 {
  \clist_map_inline:nn { #1 }
   {
    \seq_gput_right:Nn \g_casimir_search_replace_seq { ##1 }
   }
 }

\NewDocumentCommand{\domainemail}{om}
 {
  \IfNoValueTF { #1 }
   {
    \casimir_domainemail:n { #2 }
   }
   {
    \casimir_href:nn { #1 } { #2 }
   }
 }

\seq_new:N \g_casimir_search_replace_seq
\tl_new:N \l_casimir_input_tl
\cs_generate_variant:Nn \tl_lower_case:n { V }

\cs_new_protected:Nn \casimir_href:nn { \href{mailto:#[email protected]}{#2} }
\cs_generate_variant:Nn \casimir_href:nn { V }

\cs_new_protected:Nn \casimir_domainemail:n
 {
  \seq_set_from_clist:Nn \l__casimir_domainemail_temp_seq { #1 }
  \int_compare:nTF { \seq_count:N \l__casimir_domainemail_temp_seq > 1 }
   {
    \tl_set:Nx \l_casimir_input_tl
     {
      \seq_item:Nn \l__casimir_domainemail_temp_seq { 2 }
      .
      \seq_item:Nn \l__casimir_domainemail_temp_seq { 1 }
     }
    \tl_remove_all:Nn \l_casimir_input_tl { ~ }
   }
   {
    \seq_set_split:Nnn \l__casimir_domainemail_temp_seq { ~ } { #1 }
    \tl_set:Nx \l_casimir_input_tl
     {
      \seq_use:Nn \l__casimir_domainemail_temp_seq { . }
     }
   }
  \tl_set:Nx \l_casimir_input_tl { \tl_lower_case:V \l_casimir_input_tl }
  \seq_map_inline:Nn \g_casimir_search_replace_seq
   {
    \tl_replace_all:Nnn \l_casimir_input_tl ##1
   }
  \casimir_href:Vn \l_casimir_input_tl { #1 }
 }
\ExplSyntaxOff

% set up the translations

\addtranslations{
  {æ}{ae},
  {ä}{ae},
  {ö}{oe},
  {ü}{ue},
  {ß}{ss},
  {ñ}{n},
  {é}{e},
}



\begin{document}

\domainemail{Jack Johnson}

\domainemail{Johnson-Löffler, Jack Björn}

\domainemail{Äöß, Reñé Joseph}

\domainemail[strange]{Some strange name}

\end{document}

在此处输入图片描述

答案2

添加句点很简单,\add@period#1 #2{#1.#2}使用空格作为第一个名字和第二个名字的分隔符,然后用 then 输入.

在我看来,将名字转换为小写更加困难,但我使用了\text_lowercase:n提供expl3此功能的功能。

\documentclass{article}
\usepackage[svgnames,dvipsnames,x11names]{xcolor}
\usepackage[colorlinks=true,allcolors=DarkBlue]{hyperref}
\usepackage{expl3}

\makeatletter
\def\add@period#1 #2{#1.#2}%
\ExplSyntaxOn
\newcommand{\addperiod}[1]{%
  \text_lowercase:n{\add@period#1}% Expandable lower case
}
\ExplSyntaxOff
\makeatother


\newcommand{\domainemail}[1]{%
  \href{mailto:\addperiod{#1}@domain.org}{#1}%
}


\begin{document}
\domainemail{Jack Johnson}
\end{document}

相关内容