这篇文章已经涵盖了我的问题: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
配合使用效果很好。但是,使用编译器会引发以下错误:pdflatex
latex
xelatex
! 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
测试值x
、1:T
、3: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}