如何修补来自 leipzig.sty 的命令

如何修补来自 leipzig.sty 的命令

如图所示莱比锡和词汇表一起使用的问题,由于该包依赖于 中已弃用的命令,因此在将该包leipzig与该glossaries包一起使用时会出现问题。leipzigglossaries

问题的答案解决了这个问题,但是答案建议修改文件.sty,而我宁愿不这样做。

我尝试修补该\SetLeipzigDisplayStyle命令,但没有成功。根据egreg 的回答请指导一下patchcmd和xpatch的使用xpatch,在尝试使用可选参数修补命令时应该使用。\SetLeipzigDisplayStyle就是这样的命令,但尝试用它修补\xpatchcmd对我来说不起作用。我该如何修复此问题而不诉诸(复制和)修改文件.sty

平均能量损失

% !TEX TS-program = arara
% arara: pdflatex
% arara: makeglossaries
% arara: pdflatex
% arara: pdflatex

\documentclass{article}

\usepackage{expex}

\usepackage[nomain,nostyles]{glossaries}
\usepackage{glossary-inline}
\usepackage{leipzig}
\makeglossaries

\usepackage{xpatch}
\xpatchcmd{\SetLeipzigDisplayStyle}{%
    \defglsdisplay[#1]{\leipzigfont{##1}##4}%
    \defglsdisplayfirst[#1]{\firstleipzigfont{##1}##4}%
}{%
    \renewcommand*{\glstextformat}[1]{\leipzigfont{#1}}%
}{}{}

\begin{document}

\ex
\begingl
\gla mulle//
\glb \First\Sg:\Dat{}//
\endgl
\xe

go.\Pst{}

\printglossary[style=inline,type=\leipzigtype]

\end{document}

您可以看到它仍然会产生莱比锡和词汇表一起使用的问题

在此处输入图片描述

答案1

etoolbox我认为当搜索文本包含##(请注意,xpatch是基于)时不可能进行修补etoolbox

此外,请求的补丁相当于

\renewcommand*{\SetLeipzigDisplayStyle}[1]{%
  \renewcommand*{\glstextformat}[1]{\leipzigfont{#1}}%
}

所以不清楚你为什么要寻找补丁。

顺便说一句,xpatch对于特定目的来说并不是严格需要的,因为\SetLeipzigDisplayStyle没有用可选参数定义。

如果你坚持要打补丁,

\usepackage{regexpatch}
\xpatchcmd{\SetLeipzigDisplayStyle}
  {\defglsdisplay[#1]{\leipzigfont{##1}##4}%
   \defglsdisplayfirst[#1]{\firstleipzigfont{##1}##4}}
  {\renewcommand*{\glstextformat}[1]{\leipzigfont{#1}}}
  {}{}

完成工作。

但如果我随后添加

\newcommand*{\test}[1]{\renewcommand*{\glstextformat}[1]{\leipzigfont{#1}}}

\ifx\test\SetLeipzigDisplayStyle\message{EQUAL}\fi

EQUAL在日志文件中发现,修补确实没有必要,应该使用重新定义。


大概

相关内容