svn-multi vs hyperref vs non-ascii svn info vs memoir headers

svn-multi vs hyperref vs non-ascii svn info vs 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

請注意UTF8 中的LastChangedDate包含方式。我通常在採用英語設定的 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 用戶輸入一樣,正確的方法是使用\protected@...等效的LaTeX 內核

\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.

相關內容