带有 Xelatex 的 Lilypond-book 无法检测文本宽度

带有 Xelatex 的 Lilypond-book 无法检测文本宽度

如果这听起来与其他问题相似,我深表歉意。显然我在其他帖子中找不到解决方案,也许我使用的某些软件包存在冲突(fontspec?)。

即使使用正确的选项 (--latex-program=xelatex) 运行 lilypond-book,xelatex 也会创建一个输出,其中音乐线在文本边距处没有正确断开,但在页边距处断开。这导致音乐与侧边注重叠。

感谢您的任何建议:

\documentclass[a3paper, 14pt, twoside, showtrims]{memoir}
\settrimmedsize{340mm}{210mm}{*}
\setlrmarginsandblock{23.3mm}{46.7mm}{*}
\setulmarginsandblock{23.3mm}{54.9mm}{*}
\setmarginnotes{2.8mm}{23.3mm}{1em}
\renewcommand{\sideparfont}{\normalfont\itshape\fontsize{12pt}{12pt}\selectfont‌​\small}
\renewcommand{\footnotesize}{\normalfont\fontsize{12pt}{12pt}\selectfont‌​\small}
\sideparmargin{outer}
\checkandfixthelayout 
\settypeoutlayoutunit{mm}
\typeoutlayout

\usepackage{fontspec}
\setmainfont[Mapping=tex-text,Style=TitlingCaps,Ligatures={Common}]{Garamond Premier Pro} %\defaultfontfeatures{Ligatures=Historic} 
\newfontfamily\greekfont[Script=Greek, Ligatures={Common}]{Garamond Premier Pro}
\newfontfamily\devanagarifont[Script=Devanagari]{Sanskrit 2003}


\usepackage{polyglossia}
\setdefaultlanguage{italian}
\setotherlanguage[variant=british]{english}
\setotherlanguage[variant=polytonic]{greek}
\setotherlanguage{sanskrit}

\usepackage{lipsum}


\begin{document}

Even running lilypond-book with the correct option (--latex-program=xelatex) xelatex creates an output where music lines are not correctly broken.\sidepar{\lipsum}

Apparently lilypond-book fails to detect textwidth from LaTex. 

\noindent \begin{lilypond}[fragment,quote,staffsize=12]
\clef bass a,1 b c a b c a b c a b c a b  a b c a b c a b c a b c
\end{lilypond}

\lipsum 

\end{document}

答案1

很久以前(大概两年前)我遇到过同样的问题,我通过明确设置 line-width 选项解决了这个问题。遗憾的是 lilypond-book 无法解释宏,因此line-width=\linewidth无法按预期工作。

现在我发现在\ifxetex块内加载 polyglossia 和 fontspec 可以恢复启发式线宽检测算法的功能。

一个最小的工作示例可能是:

\documentclass{scrartcl}
\usepackage{ifxetex}
\ifxetex
  %xetex specific stuff
  \usepackage{fontspec,polyglossia}
\fi

\setmainlanguage{english}

\author{}
\date{}

\begin{document}
\title{A short document with LilyPond and XeLaTex}
\maketitle

Normal \textbf{font} commands inside the \emph{text} work,
because they \textsf{are supported by \LaTeX{} and XeteX.}

In normal text you can easily use LilyPond commands, like this:

\begin{lilypond}
    {a2 b c'8 c' c' c'}
\end{lilypond}

\noindent
and so on.

The fonts of snippets set with LilyPond will have to be set from inside of
the snippet. For this you should read the AU on how to use lilypond-book.

\begin{lilypond}
  \score {<<
    \new Staff <<
      \relative c' {
        c4 d e f 
        g a b c
        d e f g 
        a b c2 
        c4 b a g
        f e d c
        b a g f 
        e d c2 \bar "|."
    }
    >>
  >>}
\end{lilypond}

\end{document}

希望这对任何人都有帮助。

答案2

好吧,也许这听起来像是一个非常愚蠢的解决方案,但显然它是有效的。

我使用 lualatex 作为 latex 程序运行 lilypond-book。然后我使用 xelatex 处理生成的 texfile。显然 xelatex 无法检测到的内容被 lualatex 检测到了。

如有任何评论我将不胜感激。

A

相关内容