![命令参数中 eledpar 的 \stanza 对齐制表符位置错误](https://linux22.com/image/276529/%E5%91%BD%E4%BB%A4%E5%8F%82%E6%95%B0%E4%B8%AD%20eledpar%20%E7%9A%84%20%5Cstanza%20%E5%AF%B9%E9%BD%90%E5%88%B6%E8%A1%A8%E7%AC%A6%E4%BD%8D%E7%BD%AE%E9%94%99%E8%AF%AF.png)
我尝试定义一个命令来使用 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