我尝试定义一个命令来使用 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