
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 LastChangedDate
contém sø
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}
- Se eu remover as
ø
compilações do MWE - Eu retiro
\sffamily
do rodapé que ele compila - Se eu removê
hyperref
-lo compila - Se eu remover a
filehooks
opção desvn-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, 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 \xdef
em \svn@pushfilestack
que 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
.