ledpar 与 polyglossia:\begin{⟨lang⟩}…\end{⟨lang⟩} 的问题

ledpar 与 polyglossia:\begin{⟨lang⟩}…\end{⟨lang⟩} 的问题

polyglossia我对和的组合有点问题ledpar。首先是例子

\documentclass[11pt,a4paper]{scrartcl}
\usepackage{xltxtra}
\usepackage{libertine}
\usepackage{polyglossia}
    \setmainlanguage[spelling=new,babelshorthands=true]{german}
    \setotherlanguage{latin}
    \setotherlanguage[variant=poly]{greek}
\usepackage{ledmac,ledpar}% PROBLEM-LINE
\begin{document}
\minisec{german}
Weit hinten, hinter den Wortbergen, fern der Länder Vokalien und Konsonantien
leben die Blindtexte. Abgeschieden wohnen Sie in Buchstabhausen an der Küste
des Semantik, eines großen Sprachozeans.

\minisec{latin}
\begin{latin}
Ulpianus libro primo institutionum pr Iuri operam daturum prius nosse oportet,
unde nomen iuris descendat. est autem a iustitia appellatum: nam, ut eleganter
Celsus definit, ius est ars boni et aequi.
\end{latin}

\minisec{greek}
\begin{greek}
μῆνιν ἄειδε θεὰ Πηληϊάδεω Ἀχιλῆος οὐλομένην, ἣ μυρί' Ἀχαιοῖς ἄλγε'
ἔθηκε, πολλὰς δ' ἰφθίμους ψυχὰς Ἄϊδι προί̈αψεν ἡρώων
\end{greek}

\minisec{short-versions}
Hier steht etwas griechisches: \textgreek{Πηληϊάδεω}
\end{document}

如果没有问题线,其中包括ledpar,一切工作正常,但在使用外语环境时我遇到了问题,导致环境内容开头的 PDF 中出现一些额外的文本(]latin或)。]greek

简短版本没有问题\text⟨lang⟩

答案1

这里提到了同样的问题:http://tug.org/pipermail/xetex/2010-June/017029.html

我提出了一个基于文档的补丁:

\letcs\POLYselectlanguage{\string\selectlanguage}
\usepackage{ledmac}
\usepackage{ledpar}
\AtBeginDocument{
\renewcommand{\selectlanguage}[2][]{%
   \POLYselectlanguage[#1]{#2}%
   \ifledRcol
     \gdef\theledlanguageR{#2}%
   \else
     \gdef\theledlanguageL{#2}%
  \fi}
}

正如原帖所说,这解决了问题。François Charette 为 ledpar 和 ledmac 提出了一个补丁 (http://tug.org/pipermail/xetex/2010-June/017067.html),但我不知道后来发生了什么。

François 提出的补丁是更改 ledpar.sty 中的某些行:第 1481-1498 行

\AtBeginDocument{%
  \@ifundefined{bbl@main@language}{%
    \l@dusedbabelfalse
    \renewcommand*{\selectlanguage}[1]{}}{%
    \l@dusedbabeltrue
    \let\l@doldselectlanguage\selectlanguage
    \let\l@doldbbl@set@language\bbl@set@language
    \let\bbl@set@language\l@dbbl@set@language
    \renewcommand{\selectlanguage}[1]{%
      \l@doldselectlanguage{#1}%
      \ifledRcol \gdef\theledlanguageR{#1}%
      \else      \gdef\theledlanguageL{#1}%
      \fi}
    \renewcommand*{\l@duselanguage}[1]{%
      \l@doldselectlanguage{#1}}
    \gdef\theledlanguageL{\bbl@main@language}%
    \gdef\theledlanguageR{\bbl@main@language}%
}}

应该成为

\AtBeginDocument{
  \@ifundefined{xpg@main@language}{% 
    \@ifundefined{bbl@main@language}{% no babel, no polyglossia
      \l@dusedbabelfalse
      \renewcommand*{\selectlanguage}[1]{}%
      }{% else babel loaded
      \l@dusedbabeltrue
      \let\l@doldselectlanguage\selectlanguage
      \let\l@doldbbl@set@language\bbl@set@language
      \let\bbl@set@language\l@dbbl@set@language
      \renewcommand{\selectlanguage}[1]{%
        \l@doldselectlanguage{#1}%
        \ifledRcol \gdef\theledlanguageR{#1}%
        \else      \gdef\theledlanguageL{#1}%
        \fi}
      \renewcommand*{\l@duselanguage}[1]{%
        \l@doldselectlanguage{#1}}
      \gdef\theledlanguageL{\bbl@main@language}%
      \gdef\theledlanguageR{\bbl@main@language}%
      }%
    }{%else polyglossia loaded
      \apptocmd{\xpg@set@language}{%
        \ifledRcol \gdef\theledlanguageR{#1}%
        \else      \gdef\theledlanguageL{#1}%
        \fi}%
      \let\l@duselanguage\xpg@set@language
      \gdef\theledlanguageL{\xpg@main@language}%
      \gdef\theledlanguageR{\xpg@main@language}%
    }}

它本质上是我建议的(基于文档的)补丁,但更干净。

答案2

2011 年 8 月:

Maïeul Rouquette 已使用上述 François Charette 补丁更新了 CTAN 中的 ledpar.dtx 文件。(参见https://groups.google.com/d/topic/comp.text.tex/NCly-8DJtkM/discussion) 包含此新补丁的最新版本 ledpar.dtx 是

通过这个版本的ledpar,Martin Scharrer上面提到的问题就解决了。

然而,我最近安装了 TeXlive 2011,我注意到它在 0.3b 版本中提供了 ledpar.sty,并且没有 Charette 补丁。在 TeXlive 2011 更新之前,您需要手动获取并安装 0.3c 版本。

答案3

polyglossia和都ledpar重新定义了\selectlanguage。 ledpar 的定义“win” 和 在文档中处于活动状态,但具有不同数量的参数:\renewcommand{\selectlanguage}[1]versus\renewcommand{\selectlanguage}[2][]来自 polyglossia。

你需要一个能够理解 ledpar 通过重新定义\selectlanguage来解决冲突想要达到什么目的的人。

相关内容