LINUX.ORG.RU

git-latexdiff: ! Ошибка TeX capacity exceeded при наличии ключа --bibtex

 ,


0

2

Главный файл self.tex включает кучу \include и используется bibtex (\bibliography{self} \bibliographystyle{elsarticle-num}). Делаю коммит на git. Затем сравниваю версии. Команда git latexdiff HEAD~1 --main self.tex работает отлично. В \tmp создается файл, в котором изменения подчеркнуты синим. Как написано в мане, при наличии ключа запусается latexpand, который все объединяет в один файл, и затем уже запускается latexdiff. Но изменения в ссылках не дает. Для этого надо поставить ключ --bibtex (display changes in the bibliography (runs bibtex to generate *.bbl files and include them in the source file using latexpand --expand-bbl before computing the diff). С таким ключом компилит первый раз, затем встает надолго и выдет ошибку

! TeX capacity exceeded, sorry [input stack size=5000].
\@makeother #1->\catcode `#1
                            12\relax 
l.2340 ...://dx.doi.org/10.1002/andp.19404300504}}
                                                  
!  ==> Fatal error occurred, no output PDF file produced!
Transcript written on self.log.
No PDF file generated.
Working directory: /tmp/git-latexdiff.5207/new
Expected PDF: ./self.pdf
Error during compilation. Please examine and cleanup if needed:
Directory: /tmp/git-latexdiff.5207/new/.
     File: self.tex
  Problem: command 'pdflatex' (third run) failed.

Ссылку на которой ломается проверил, ничего особенного нет, обычная ссылка. Пробовал с ключом --run-bibtex, такая же ошибка. ! TeX capacity exceeded может означать зацикливание, но на чем? И почему без этих ключей все нормально компилится? При третьей компилляции возникают такие ошибки
WARNING: Inconsistency in length of input string and parsed string:
     This often indicates faulty or non-standard latex code.
     In many cases you can ignore this and the following warning messages.
 Note that character numbers in the following are counted beginning after \begin{document} and are only approximate.
url\endcsname\relax   \def\url#1{\texttt{#1}}\fi \expandafter\
                              ^^                              
Missing characters near word 24513 character index: 250186-250188 Length: 1 Match: |1| (expected match marked above).

ef\endcsname\relax   \def\href#1#2{#2} \def\path#1{#1}\fi \PAR
                              ^^                              
Missing characters near word 24536 character index: 250334-250336 Length: 1 Match: |1| (expected match marked above).

\endcsname\relax   \def\href#1#2{#2} \def\path#1{#1}\fi \PAR \
                              ^^                              
Missing characters near word 24538 character index: 250336-250338 Length: 1 Match: |2| (expected match marked above).

dcsname\relax   \def\href#1#2{#2} \def\path#1{#1}\fi \PAR \bib
                              ^^                              

★★★

Последнее исправление: rustamych (всего исправлений: 1)

Ответ на: комментарий от aquadon

Такие же ошибки. Для точности, делал так. latexpand --expand-bbl self.bbl self.tex > snew.tex для новой версии и latexpand --expand-bbl self.bbl self.tex > sold.tex для старой версии. Проверил, внутри полный текст с файлом bbl внутри. Потом запустил сравнение полученных файлов latexdiff solt.tex snew.tex > diff.tex. Тут снова вылезли эти же ошибки. Причем делает очень долго, видимо зацикливание. Файл diff.tex создается, но не компилируется. Спотыкается на ссылке, которая появляется в новой версии

\DIFaddbegin \bibitem{Bopp:1940:eltde}
\DIFadd{F.~Bopp, Eine lineare theorie des elektrons, Ann. Phys. 430~(5) (1940)
  345--384.
}\newblock \href {\DIFadd{http://dx.doi.org/10.1002/andp.19404300504}}
  {\path{doi:10.1002/andp.19404300504}}\DIFadd{.
}

rustamych ★★★
() автор топика
Ответ на: комментарий от rustamych

Попробуй отредактировать эту библиографическую запись чтобы отследить где именно возникает ошибка.

aquadon ★★★★★
()
Ответ на: комментарий от aquadon

Удалил doi={10.1002/andp.19404300504}, теперь спотыкается на следующей новой ссылке, в которой есть doi:

\bibitem{Podolsky:1942:agepiq}
\DIFadd{B.~Podolsky, A generalized electrodynamics part i}{\DIFadd{\textemdash}}\DIFadd{non-quantum,
  Phys. Rev. 62~(1-2) (1942) 68--71.
}\newblock \href {\DIFadd{http://dx.doi.org/10.1103/physrev.62.68}}
  {\path{doi:10.1103/physrev.62.68}}\DIFadd{.
}
Похоже какой то конфликт с doi. Здесь https://tex.stackexchange.com/questions/24247/tex-capacity-exceeded-sorry-inp... обсуждается нечто похожее. Видимо конфликт со стилем журнала elsarticle-num.

rustamych ★★★
() автор топика
Ответ на: комментарий от aquadon

Попробовал сменить стиль библиографии на apsrev4-1. diff создается, но опять не компилится. Выдет ошибку в строке \bibitem [{\citenamefont {\DIFaddbegin \DIFadd{Bopp}}\DIFadd{(1940)}}]{\DIFadd{Bopp:1940:eltde}} с ошибкой Missing \endcsname inserted. ...Fadd{(1940)}}]{\DIFadd{Bopp:1940:eltde}}. Т.е. ошибка получается везде, где есть исправления в ссылках, где есть \DIFadd.

rustamych ★★★
() автор топика
Ответ на: комментарий от rustamych

Еще раз для тех, кто тормозит сегодня вечером. Ошибка вылезает при попытке запустить latexdiff на файлах с ключем doi в библиографии?

Если да, то отключи к чертям поле doi на время написания статьи.

aquadon ★★★★★
()
Ответ на: комментарий от aquadon

Ну это не решение проблемы. У меня 400 ссылок и дои требуется. Что ж мне потом их добавлять вручную? Нет уж, поищу решение проблемы. Но за участие спасибо.

rustamych ★★★
() автор топика
Ответ на: комментарий от aquadon

Я кажется нашел причину. В мане для latexdiff: The following packages trigger special behaviour:

"hyperref"
Change name of "\DIFadd" and "\DIFdel" commands to "\DIFaddtex" and "\DIFdeltex" and define new "\DIFadd" and "\DIFdel" commands, which provide a wrapper for these commands, using them for the text but not for the link defining command (where any markup would cause errors). 
У меня hyperref используется.

rustamych ★★★
() автор топика
Ответ на: комментарий от aquadon

Да, решило. Что удивительно, при компиляции файл diff создается с теми же ошибками, но потом компилируется и показывает изменения в новых ссылках.

rustamych ★★★
() автор топика
Ответ на: комментарий от aquadon

Можно оставить hyperref и в старой и в новой версии. Достаточно в полученном diff отключить hyperref и тогда он компилится и показывает изменения в ссылках.

rustamych ★★★
() автор топика
Ответ на: комментарий от aquadon

Написал разработчику. Он предложил такой временный вариант

latexdiff old.tex new.tex > diff.tex
latexdiff --allow-spaces old.bbl new.bbl > diff.bbl
pdflatex diff.tex
pdflatex diff.tex
Это работает, проверял. Он обещает как сможет, исправить проблему. Но как прикрутить это к git-latexdif, непонятно.

rustamych ★★★
() автор топика
Ответ на: комментарий от aquadon

Но все предыдущии версии хранятся на гите и все с одним именем. Я не программист, мне это сложно.

rustamych ★★★
() автор топика
Ответ на: комментарий от rustamych

Опиши как ты использовал git-latexdiff (конкретный список команд с пояснением процесса), я напишу тебе скрипт.

aquadon ★★★★★
()
Ответ на: комментарий от aquadon

По большому счету это уже и не нужно. Больше такого обзора писать не буду, труда слишком много. К тому же все хорошо работает без отслеживания иземенения ссылок. Ну и обойдусь без отслеживания ссылок. На этом этапе может понадобиться только в процессе рецензирования. Может придется добавлять ссылки. Но это уже проще. Гит не нужен. Файл первоначальный и измененный на локальном компе. Работают те команды, что от разработчика. git-latex пользовал так. Такая команда

git latexdiff -t CFONT HEAD~1 --main self.tex
работает хорошо, но не отслеживает изменения ссылок. Заменой ~1 на ~2 или больше сравниваем с более удаленной версией.
git latexdiff HEAD~1 --bibtex --main self.tex
не работает с hyperref. diff файл создается в tmp, но не компилиться. Я заметил в чем дело. Встает там, где есть рядом \href и \DIFadd. Я написал небольшой скрипт «sed -i 's/\\href {\\DIFadd/\\href {/g' diff.tex », который исправляет эту проблему и затем все компилится. Но, если удаляются ссылки, то возникает другая трудность, которая этим скриптом не решается. Конфликт с другой командой \DIFchange что-ли, не помню уже. На этом мое терпение кончилось, и я плюнул на ссылки. Разработчик пишет, что займется этим, как будет время https://github.com/ftilmann/latexdiff/issues/198#issuecomment-632760085 . Лучше уж дождаться, когда сделает.

rustamych ★★★
() автор топика
Ответ на: комментарий от aquadon

Нашел путь как все работает :). Начальный файл old.tex. Добавил две ссылки new.tex. Удалил одну из new.tex, получился new1.tex. Специально сделал удаление ссылки, чтоб проверить работает или нет. Теперь так. Вставляем ссылки внутрь файлов

latexpand --expand-bbl old.bbl  old.tex > old-bbl.tex
latexpand --expand-bbl new.bbl  new.tex > new-bbl.tex
latexpand --expand-bbl new1.bbl  new1.tex > new1-bbl.tex
Потом делаем разницу с ключом --allow-space
latexdiff --allow-space -t CFONT --package=hyperref old-bbl.tex new-bbl.tex > diff-new-old.tex
latexdiff --allow-space -t CFONT --package=hyperref new-bbl.tex new1-bbl.tex > diff-new1-new.tex
Оба файла компилятся без проблем. diff-new-old.tex показывает добавление двух новых ссылок, а diff-new1-new.tex удаление одной из new.tex. Осталось понять как добавить ключ --allow-space в git latexdiff. Ключ --bibtex для git latexdiff эквивалентен --expand-bbl для latexpand, но как подсунуть ключ --allow-space? В списке ключей git latexdiff такого нет.

rustamych ★★★
() автор топика
Ответ на: комментарий от aquadon

Ну теперь кажется все. Вот так работает и отслеживает изменения в ссылках

git latexdiff -t CFONT HEAD~1 --allow-space --bibtex --main proba.tex
Специально сделал на bitbucket проект для этого и проверил. Фактически, достаточно было вставить ключ --allow-space .

rustamych ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.