如何使用 xkvltxp 允许键值 fixme 包选项中的宏?

如何使用 xkvltxp 允许键值 fixme 包选项中的宏?

fixme按照文档中的说明,我加载了该xkvltxp包以允许在键值包选项中使用宏作为值。

但是,如果我实际在文档中使用了依赖于该选项的内容,则会出现错误。例如,

\documentclass[draft]{article}
\usepackage{xkvltxp}
\usepackage[draft,envface=\itshape]{fixme}
\usepackage{kantlipsum}
\begin{document}
\kant[1]
\fxfatal{thing}
\begin{anfxfatal}{other thing}
  \kant[2]
\end{anfxfatal}
\end{document}

给出错误

FiXme Fatal Error: 'other thing' on input line 150.

! Missing control sequence inserted.
<inserted text> 
                \inaccessible 
l.150 \begin{anfxfatal}{other thing}

? h
Please don't say `\def cs{...}', say `\def\cs{...}'.
I've inserted an inaccessible control sequence so that your
definition will be completed without mixing me up too badly.
You can recover graciously from this error, if you're
careful; see exercise 27.2 in The TeXbook.

当加载包或\fxfatal使用包时不会发生错误,而只有当(并且如果)在文档中使用了受anfxfatal该选项影响的环境时才会发生错误。envface

我究竟做错了什么?

请注意,我知道如何解决此错误。我专门询问如何正确执行此操作才能正常\usepackage[envface=\itshape]{fixme}工作,而不是如何在环境中使字体变为斜体fixme

答案1

xkvltxp包重新定义\@fileswith@pti@ns以允许控制序列,但不幸的是使用了,因此绝对不允许\edef这样的命令。\itshape

\documentclass[draft]{article}
\usepackage{xkvltxp}

\usepackage{etoolbox}
% fix the error in xkvltxp
\makeatletter
\patchcmd{\@fileswith@pti@ns}{\edef}{\protected@edef}{}{}
\patchcmd{\@fileswith@pti@ns}{\edef}{\protected@edef}{}{}
\makeatother

\usepackage[draft,envface=\itshape]{fixme}
\usepackage{kantlipsum}
\begin{document}
\kant[1]
\fxfatal{thing}
\begin{anfxfatal}{other thing}
  \kant[2]
\end{anfxfatal}
\end{document}

我更喜欢以下策略,而不是使用包选项\fxsetup

\documentclass[draft]{article}

\usepackage[draft]{fixme}
\usepackage{kantlipsum}

\fxsetup{envface=\itshape}

\begin{document}
\kant[1]
\fxfatal{thing}
\begin{anfxfatal}{other thing}
  \kant[2]
\end{anfxfatal}
\end{document}

相关内容