Svn-multi 与 hyperref 与 non-ascii svn info 与 memoir headers

Svn-multi 与 hyperref 与 non-ascii svn info 与 memoir headers

这是今天的奇怪错误。上周末,为了“好玩”,我玩了 Win 8 和 TortoiseSVN。提交后,我的 LaTeX 项目突然无法编译。

我选择以下 MWE 组合

主文件:

\documentclass[a4paper]{memoir}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\makepagestyle{test}
\makeoddfoot{test}{}{\sffamily\thepage}{}
\pagestyle{test}
\usepackage[filehooks]{svn-multi}
\usepackage[colorlinks]{hyperref}
\begin{document}

Test
\input{test2}

\end{document}

test2.tex

\svnidlong
{$HeadURL: https://url $}
{$LastChangedDate: 2015-07-26 15:59:20 +0200 (sø, 26 Jul 2015) $}
{$LastChangedRevision: 1 $}
{$LastChangedBy: daleif $}


\chapter{test}

test

注意LastChangedDate包含的内容是 UTF8。我通常在使用英语设置的 Linux 上工作,因此在其他地方该部分将是Sun(ascii)

以下是我的观察

我得到了错误

./test2.tex:8: Undefined control sequence.
GenericError  ...                                 
                                                    #4  errhelp @err@       ...
l.8 \chapter
            {test}
  1. 如果我删除øMWE 编译
  2. \sffamily从页脚中删除了它编译
  3. 如果我删除hyperref它编译
  4. 如果我filehooks从中删除选项svn-multi,它会编译

知道发生什么事了吗?

(一个可行的解决方案是解释如何告诉 TortoiseSVN 始终使用英语,这是丹麦语 søndag(星期日)的缩写)

答案1

这是一个经典的“ \edef(或类似)应用于脆弱的用户输入”问题:如果在尝试应用该标记的任何部分中有一个“不安全”标记,则\xdef其中\svn@pushfilestack的“不安全”标记会失败。与任何 LaTeX2e 用户输入一样,正确的方法是使用 LaTeX 内核\protected@...等效项

\documentclass[a4paper]{memoir}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\makepagestyle{test}
\makeoddfoot{test}{}{\sffamily\thepage}{}
\pagestyle{test}
\usepackage[filehooks]{svn-multi}
\usepackage{xpatch}
\makeatletter
\xpatchcmd\svn@pushfilestack{\xdef}{\protected@xdef}{}{}
\makeatother
\usepackage[colorlinks]{hyperref}
\begin{document}

\input{test2}

\end{document}

理想情况下,这个问题应该在 中得到修复svn-multi

相关内容