命令参数中 eledpar 的 \stanza 对齐制表符位置错误

命令参数中 eledpar 的 \stanza 对齐制表符位置错误

我尝试定义一个命令来使用 eledpar 输入并行文本/翻译,以避免必须编写并行排版的所有代码(为了代码清晰,也因为我很懒)。

因此我尝试了这个:

    %XeTeX document
    \documentclass{article}

    \usepackage{fontspec}
    \usepackage{xunicode,xltxtra}

    \usepackage[english,latin,german,francais]{babel}

    \usepackage{eledmac}
    \usepackage{eledpar}

    \begin{document}

    \setstanzaindents{1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0}

    \begin{pairs}
      \begin{Leftside}
        \beginnumbering
    \stanza
    First verse&
    second verse\&
        \endnumbering
      \end{Leftside}
      \begin{Rightside}
        \beginnumbering
    \stanza
    First translation&
    second translation\&
        \endnumbering
      \end{Rightside}
    \Columns
    \end{pairs}

    %Up to this part, everything works as expected

    \newcommand{\trad}[2]{
    \begin{pairs}
      \begin{Leftside}
        \beginnumbering
        #1
        \endnumbering
      \end{Leftside}
      \begin{Rightside}
        \beginnumbering
        #2
        \endnumbering
      \end{Rightside}
    \Columns
    \end{pairs}
    }

    \trad{
    \stanza
    First verse&
    second verse\&
    }
    {
    \stanza
    First translation&
    second translation\&
    }

    \end{document}

第一部分是基本代码,按预期工作。然而,第二部分产生了

    Section 2  (./minimalstanza.2)
   ! Misplaced alignment tab character &.
   <argument>  \stanza First translation&
                                   second translation\& 
   l.58 }

知道为什么会这样吗?如何修复?带有参数的命令应产生与常规块完全相同的代码。

同一个示例,常规文本以 \pstart 和 \pend 作为参数开始和结束,效果很好。在成对环境之外单独使用一个节也可以。

答案1

\stanza命令将的含义更改&活跃角色. 这使得无法将\stanza文本用作&另一个命令的参数,除非采取一些预防措施。

在您的情况下,最简单的技巧是使用\scantokens重新读取参数并忽略已分配的类别代码:

%XeTeX document
\documentclass{article}

\usepackage{fontspec}

\usepackage[english,latin,german,francais]{babel}

\usepackage{eledmac}
\usepackage{eledpar}

\begin{document}

\setstanzaindents{1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0}

\begin{pairs}
  \begin{Leftside}
\beginnumbering
\stanza
First verse&
second verse\&
\endnumbering
  \end{Leftside}
  \begin{Rightside}
\beginnumbering
\stanza
First translation&
second translation\&
\endnumbering
  \end{Rightside}
\Columns
\end{pairs}

%Up to this part, everything works as expected

%\newcommand{\trad}{\begingroup\catcode`&=\active\innertrad}
%\newcommand{\innertrad}[2]{%
\newcommand{\trad}[2]{\scantokens{%
  \begin{pairs}
  \begin{Leftside}
  \beginnumbering
  #1
  \endnumbering
  \end{Leftside}
  \begin{Rightside}
  \beginnumbering
  #2
  \endnumbering
  \end{Rightside}
  \Columns
  \end{pairs}
  \endinput}
}

\trad{
\stanza
First verse&
second verse\&
}
{
\stanza
First translation&
second translation\&
}

\end{document}

请注意,不再推荐xunicode加载。xltxtra

相关内容