
本日の奇妙なエラーです。先週末、「楽しみ」のために 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で記述されていることに注意してくださいsø
。私は通常、英語設定の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 ユーザー入力と同様に、正しいアプローチは 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
。