使用哈希表将字符串转换为一个字符

使用哈希表将字符串转换为一个字符

我有一份报告中提到了一些人。有时我想隐藏这些人的真实姓名。我想编写一个宏,将姓名转换为单个字符。

\name{John Doe}hide当布尔值为真时,应该打印 PersonA ,John Doe否则打印。

我需要一些将名称转换为单个字符的宏,但文档中的每个名称都应转换为相同的字符。

答案1

我将每个名称存储在一个属性列表中,并附上一个用字母表示的动态计算的整数。

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn

\NewDocumentCommand{\name}{m}
 {
  \textnik_name:n { #1 }
 }

\NewDocumentCommand{\hidenames}{}
 {
  \bool_gset_false:N \g_textnik_name_bool
 }

\NewDocumentCommand{\shownames}{}
 {
  \bool_gset_true:N \g_textnik_name_bool
 }

\prop_new:N \g_textnik_name_prop
\int_new:N \g_textnik_name_int
\bool_new:N \g_textnik_name_bool

\cs_new_protected:Nn \textnik_name:n
 {
  \prop_if_in:NnF \g_textnik_name_prop { #1 }
   {
    \int_gincr:N \g_textnik_name_int
    \prop_gput:Nnx \g_textnik_name_prop { #1 } { \int_to_Alph:n { \g_textnik_name_int } }
   }
  \bool_if:NTF \g_textnik_name_bool
   {
    #1
   }
   {
    Person\prop_item:Nn \g_textnik_name_prop { #1 }
   }
 }

\ExplSyntaxOff

\shownames

\begin{document}

Here we talk about \name{John Doe} and about
\name{Ööç Galaxy} and again about \name{John Doe}.

\hidenames

Here we talk about \name{John Doe} and about
\name{Ööç Galaxy} and again about \name{John Doe}.

\end{document}

在此处输入图片描述

相关内容