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}