我正在开发一个用于编辑会议记录中姓名的软件包。其想法是将姓名“John Doe”替换为“<person 1>”。但是,此软件包既可用于英语文本,也可用于荷兰语文本(其中需要“<persoon 1>”),因此我想知道是否有一种首选方式来实现使用 LaTeX3 内核编写的软件包的国际化(使用 babel a/o polyglossia)。我知道“translator”和“translations”软件包,但它们似乎更适合 LaTeX2e。
梅威瑟:
\documentclass{article}
\usepackage{expl3}
\usepackage{xparse}
\ExplSyntaxOn
\prop_new:N \g_redact_person_prop
\prop_set_from_keyval:Nn \g_redact_person_prop {
{Douwe~Hoekstra} = 1
}
\cs_new_protected:Npn \redact_replace_person:n #1 {
\prop_get:NnNT \g_redact_person_prop {#1} \l_tmpa_tl {<person~\tl_use:N \l_tmpa_tl>}
}
\NewDocumentCommand{\person}{m}{\redact_replace_person:n {#1}}
\ExplSyntaxOff
\begin{document}
\person{Douwe Hoekstra}
\end{document}
答案1
不使用 babel 或 polyglossia,因此仅为部分解决方案。
对于处理的编辑端,将语言标签作为将扩展为person
或 的控制序列名称的一部分persoon
,然后使用cs:w
和对动态地引用控制序列cs_end:
。
例如:如果\langtag
定义为\newcommand\langtag{ne}
,并且 如果\personnamene
定义为\newcommand\personnamene{persoon}
,则将\cs:w personname\langtag \cs_end:
排版persoon
。
如果文本量很大,您可能还需要轻松突出显示输入错误。
请注意,expl3 语法忽略空格。
平均能量损失
\documentclass{article}
%\usepackage{expl3} % part of kernel now
\usepackage{xparse} % only needed for LaTeX prior to 2020-10-01
\ExplSyntaxOn
\newcommand\langtag{ne}
\newcommand\personnameen{person}
\newcommand\personnamene{persoon}
\prop_new:N \g_redact_person_prop
\prop_set_from_keyval:Nn \g_redact_person_prop {
{ Douwe ~ Hoekstra } = 1,
{ Jan ~ van ~ der ~ Zee } = 2
}
\cs_new_protected:Npn \redact_replace_person:n #1 {
\prop_if_in:NnTF
\g_redact_person_prop
{#1} {
\prop_get:NnNT
\g_redact_person_prop
{#1}
\l_tmpa_tl
{
<
\cs:w personname\langtag \cs_end:
~
\tl_use:N \l_tmpa_tl
>
}
} % in property list
{XXX???} % not in property list
}
\NewDocumentCommand{\person} { m } {
\redact_replace_person:n {#1}
}
\ExplSyntaxOff
\begin{document}
\textbackslash langtag is: \langtag.
\person{Douwe Hoekstra} \ldots
\person{Douwe hoekstra} \ldots typing error
\person{Jan van der Zee} \ldots -- another name
\bigskip
\renewcommand\langtag{en}
\textbackslash langtag is: \langtag.
\person{Douwe Hoekstra} \ldots
\person{Douwe hoekstra} \ldots typing error
\person{Jan van der Zee} \ldots -- another name
\end{document}