在使用句法与 microtype 一起打包时,我偶然发现了一个奇怪的错误:
缺少字体标识符。<待重新读取>\chardef <TEST> ::= `
缺失数字,视为零。<重新阅读>\chardef <TEST> ::= `
使用以下内容最小示例,我能够重现该错误:
\documentclass{article}
\usepackage{syntax}
\usepackage{microtype}
\begin{document}
\begin{grammar}
<TEST> ::= `test'
\end{grammar}
\end{document}
当我移除 microtype 时,这个功能就正常工作了。巧合的是,我还发现了一个似乎可以解决问题的 hack\lit*{}
通过在语法定义之前添加命令,例如
\documentclass{article}
\usepackage{syntax}
\usepackage{microtype}
\begin{document}
\lit*{}
\begin{grammar}
<TEST> ::= `test'
\end{grammar}
\end{document}
有没有办法彻底解决此错误?是什么原因造成的?
答案1
编辑此问题已在microtype
v3.0 中修复。
这是 中的一个错误microtype
,由 中的一些更大胆的代码触发syntax
。下面的方法应该可以修复它:
\usepackage{microtype}
\makeatletter
\def\MT@is@opt@char#1\iffontchar#2\char#3\else#4\fi\relax{%
\MT@ifempty{#1}{%
\iffontchar#2%
\expandafter\chardef
\csname\MT@encoding\MT@detokenize@c\@tempa\endcsname=#3\relax
\fi
}\relax
}
\makeatother