
Вот странная ошибка дня. На прошлых выходных ради "развлечения" я игрался с 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
содержит sø
в UTF8. Обычно я работаю в Linux с английской настройкой, поэтому в других местах эта часть будет Sun
(ascii)
Итак, вот мои наблюдения.
Я получаю сообщение об ошибке
./test2.tex:8: Undefined control sequence.
GenericError ...
#4 errhelp @err@ ...
l.8 \chapter
{test}
- Если я удалю
ø
MWE скомпилируется - Я удаляю
\sffamily
из футера, который он компилирует - Если я удалю,
hyperref
то скомпилируется - Если я уберу
filehooks
опцию изsvn-multi
, он скомпилируется
Есть идеи, что происходит?
(Возможным решением было бы также объяснить, как заставить TortoiseSVN всегда использовать английский язык, sø
это сокращение от датского слова søndag, означающего воскресенье)
решение1
Это классическая проблема ' \edef
(или аналогичная) примененная к хрупкому пользовательскому вводу': есть \xdef
in, \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
.