LaTeX3 包国际化

LaTeX3 包国际化

我正在开发一个用于编辑会议记录中姓名的软件包。其想法是将姓名“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}

相关内容