使用 chordbox 的未定义控制序列(使用 xelatex)

使用 chordbox 的未定义控制序列(使用 xelatex)

这篇文章已经涵盖了我的问题:chordbox 的控制序列未定义

我正在尝试编译以下文档。

\documentclass[11pt,a4paper]{article}
\usepackage{chordbox_bugfix}
\pgfkeys{/chordbox/text on node=pitch}
\tikzset{chordbox/.append style={scale=2.5}}

\begin{document}

\chordbox{Am}{x,0,2,2,1,0}
\chordbox{F}{1:T,3:3,3:4,2:2,1:1,x}
\chordbox{D}{x,x,0,2:1,3:3,2:2}
\chordbox{D}{x,x,0,2,3,2}

\end{document}

此错误修复与和编译器chordbox配合使用效果很好。但是,使用编译器会引发以下错误:pdflatexlatexxelatex

! Undefined control sequence.
\pgffor@body -> \ifnum \pdfmatch 
                                 {^[0-9]+}{\fret }=1 \StrBehind {\pdflastmat...
1.10 \chordbox{Am}{x,0,2,2,1,0}

难道这个包不能用吗xelatex

答案1

\pdfmatch似乎是一个pdfTeX 原语而且似乎在过去的 13 年里都没有在 Xe(La)TeX 中实现。

这是一个etoolbox有力的修复。

只是\pdfmatch测试值x1:T3:3、 ... 是否以数字开头。

也必须\pdflastmatch替换,最初它会扩展为可能的 之前的数字。我在测试之前:用 替换了它,所以这里不再需要它了。\StrBefore\ifnum

简而言之:

  • 消除138 行

  • 代替137 行

    \StrBefore{\fret:}{:}[\num]
    \IfDecimal{\num}{\def\chordboxresult{1}}{\defchordboxresult{0}}
    \ifnum\chordboxresult=1
    

代码

\documentclass[11pt,a4paper]{article}
\usepackage{chordbox_bugfix}
\pgfkeys{/chordbox/text on node=pitch}
\tikzset{chordbox/.append style={scale=2.5}}
\usepackage{etoolbox}
\patchcmd{\chordboxenv}
  {\StrBehind{\pdflastmatch 0}{>}[\num]}% don't need that anymore
  {}{}{\errmessage{Oh no.}}
\patchcmd{\chordboxenv}
  {\ifnum\pdfmatch{^[0-9]+}{\fret}=1}
  {%
    \StrBefore{\fret:}{:}[\num]% we've got it here now anyway
    % could be x, could be a number, let's test it:
    \IfDecimal{\num}{\def\chordboxresult{1}}{\def\chordboxresult{0}}%
    \ifnum\chordboxresult=1
  }
  {}{\errmessage{Oh no.}}
\begin{document}
\chordbox{Am}{x,0,2,2,1,0}
\chordbox{F}{1:T,3:3,3:4,2:2,1:1,x}
\chordbox{D}{x,x,0,2:1,3:3,2:2}
\chordbox{D}{x,x,0,2,3,2}
\end{document}

相关内容