
오늘의 이상한 오류는 다음과 같습니다. 지난 주말 "재미"를 위해 저는 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
포함되어 있는지 참고하세요. 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
있습니다 . LaTeX2e 사용자 입력과 마찬가지로 올바른 접근 방식은 이에 상응하는 LaTeX 커널을 사용하는 것입니다.\xdef
\svn@pushfilestack
\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
.