微类型和语法包之间的冲突

微类型和语法包之间的冲突

在使用句法与 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

编辑此问题已在microtypev3.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

相关内容