Svn-multi vs hyperref vs não-ascii svn info vs cabeçalhos de memórias

Svn-multi vs hyperref vs não-ascii svn info vs cabeçalhos de memórias

Aqui está o estranho erro do dia. No fim de semana passado, por "diversão" eu estava brincando com o Win 8 e o TortoiseSVN. De repente, após um commit, meu projeto LaTeX não foi mais compilado.

Estou com o seguinte combo MWE

Arquivo mestre:

\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

Observe como LastChangedDatecontém em UTF8. Eu normalmente trabalho em Linux com configuração em inglês, então em outros lugares essa parte será Sun(ascii)

Então aqui estão minhas observações

eu recebo o erro

./test2.tex:8: Undefined control sequence.
GenericError  ...                                 
                                                    #4  errhelp @err@       ...
l.8 \chapter
            {test}
  1. Se eu remover as øcompilações do MWE
  2. Eu retiro \sffamilydo rodapé que ele compila
  3. Se eu removê hyperref-lo compila
  4. Se eu remover a filehooksopção de svn-multi, ele compila

alguma ideia do que está acontecendo?

(uma solução viável seria também explicar como dizer ao TortoiseSVN para usar sempre o inglês, é a abreviação da palavra dinamarquesa søndag para domingo)

Responder1

Este é um problema clássico ' \edef(ou semelhante) aplicado à entrada frágil do usuário': há um problema \xdefem \svn@pushfilestackque falha se você tiver um token 'inseguro' dentro de qualquer uma das partes às quais ele está tentando aplicá-lo. Como acontece com qualquer entrada do usuário LaTeX2e, a abordagem correta é usar o \protected@...equivalente do kernel 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}

Idealmente, isso deve ser corrigido em svn-multi.

informação relacionada