6/07/2010

Совместная работа над документами LaTeX

Когда вы сидите и тихо работаете над своей задачей - всё хорошо и здорово. Ровно до тех пор, пока не возникнет необходимость в совместной работе над статьёй, отчётом или другим крупным документом в LaTeX. Особенно этот процесс становится захватывающим при использовании разных кодировок и операционных систем. Но обо всём по порядку.


Совместная работа над документами LaTeX
Для того, чтобы взять под контроль процесс правок при совместной работе, перво-наперво нужно выбрать систему контроля ревизий - пусть это будет Subversion, хотя может быть и Git, и Mercurial, и подставьте_сюда_вашу_любимую_VCS. На мой взгляд, централизованные системы здесь предпочтительнее (всегда знаешь, где последняя ревизия), но это лишь моё личное скромное мнение.

Как бы там ни было, без системы контроля версий обойтись в этом процессе будет невозможно. О том, как быстро и просто установить SVN, уже написано. Использовать Subversion тоже совсем несложно, но, как и ранее, работать можно с любой VCS - я лишь привожу это в качестве примера.

Более того, отследить ревизию документа при обсуждении печатных версий также проще с использованием систем контроля версий: в LaTeX можно вставлять результаты выполнения скриптов. Например, для того, чтобы в печатный вариант документа вставлялась информация о ревизии документа, можно использовать несложный скрипт на Python.



Правки и комментарии в документах LaTeX

Приведу свои результаты проб и ошибок в деле коллективной работы над латеховскими документами. Вот тут, кстати, начинаешь немного тосковать по Word и OpenOffice.Writer, в которых есть встроенные средства для коллективной работы (правки, исправления, пометки, заметки на полях). Некое подобие этого я реализовал в LaTeX и с некоторым успехом применял для правок дипломов у своих студентов.

1. Дробление документов
С одним большим документом работать просто невозможно и жутко неудобно - так что главы дипломов, отчётов и крупных монографий лучше разделить на файлы и вставлять директивой \input. Это облегчит работу и системе контроля версий при обновлении рабочих копий - чтобы правки были неперекрывающиеся.

2. Зачёркивания и пометки цветом
Чтобы иметь возможность зачеркивать слова в LaTeX, включаем в преамбуле документа пакет ulem:
\usepackage{ulem}
И далее в тексте для зачёркивания используем команду \sout{чтобы зачёркивать текст}.
И далее в тексте для зачёркивания используем команду чтобы зачёркивать текст.
Альтернатива пакету ulem - пакет soul, где для зачёркивания используется команда \st{зачеркнуть это}.
Рядом обычно пишется вопрос или предложение фразы для соавтора - это лучше помечать цветом (при этом лучше сразу договориться, какой цвет выберет каждый соавтор, чтобы потом с ума не сойти). Для выделения цветом в LaTeX можно использовать пакет xcolor, который подключаем в преамбуле:
\usepackage{xcolor}
И далее помечаем в тексте слова \textcolor{red}{красным шрифтом}:
И далее помечаем в тексте слова красным шрифтом
Удобно, когда нужно обратить внимание соавтора на выдающийся ляп :-)


3. Заметки на полях и комментарии в LaTeX
Иногда хочется выразить своё мнение или особо обратить внимания соавтора на что-то - в этом случае стоит использовать заметки на полях. Для этого есть стандартная команда
\marginpar{Замечание соавтору сбоку на полях.}
и этот текст появится сбоку на полях, для лучшей видимости.

Но иногда комментарий длинный или хочется втянуть соавтора в письменную дискуссию - тогда нам придёт на помощь небольшой трюк. Можно определить команду комментирования, и тот текст, который будет в комментарии, не будет виден в откомпилированном документе, но в коде присутствовать будет. Для этого в преамбуле определяем новую команду так:
\newcommand{\comment}[1]{}
и в тексте можно дать волю своим полемическим способностям\comment{, потому как этот текст всё равно не будет виден в откомпилированном LaTeX-документе}.
и в тексте можно дать волю своим полемическим способностям.
Эти в общем-то нехитрые приёмы, часть из которых со временем выветривается из моей просторной головы, помогают поддерживать адекватный уровень совместной работы.

Буду рад, если многоуважаемые и ценимые мною товарищи комментаторы насыпят и отгрузят свои приёмы совместной правки LaTeX-документов в открытые на всю ширь комментарии.


Ссылки по теме

http://sovety.blogspot.com/2007/07/latex.html
http://en.wikibooks.org/wiki/LaTeX/Formatting#Emphasizing_Text
http://www.tex.raleigh.ru/doku.php/faq/typesetting

28 комментариев:

  1. Собственно так и осуществляю контроль всех текстов (программы и диплом) на своих компьютерах после одного случая неудачной синхронизации с ноута который угробил неделю работы :(

    Жаль ваша статья раньше не вышла :D

    ОтветитьУдалить
  2. я хоть и работаю в "одиночестве" но использую Bazaar для контроля версий проекта (группы документов) и в целом удобно. :) для подстраховки еще Dropbox. А за остальное спасибо за подсказки по комментариям.

    ОтветитьУдалить
  3. Всё-таки "системы управления версиями", а не "контроля" их. Не надо закреплять ошибку двоечника-переводчика, который перевёл слово "control" "как слышится". Хватит с нас такого же типа выражения "национальная идентичность" :-)

    ОтветитьУдалить
  4. kostix я прошу прощения за "управление" и "контроль", так же я не "троль", на всякий случай.:)

    ОтветитьУдалить
  5. Про использование цвета, зачёркивания, заметок на полях итп. для общения соавторов. Я упорно не понимаю, зачем это нужно. Во всех актуальных VCS есть команды diff и blame. Первая показывает, что изменилось, вторая - кто какую строку написал. Если не хочется править собственно текст, всегда можно добавить комментарий (% Перепиши это!).

    ОтветитьУдалить
  6. а еще есть \usepackage{rcs}
    и программа latexdiff (включающая latexdiff-cvs, latexdiff-rcs, latexdiff-svn)

    ОтветитьУдалить
  7. Странно, что про распределённые vcs не написал. Mercurial - наше всё, ящитаю.

    ОтветитьУдалить
  8. @Михаил
    Собственно так и осуществляю контроль всех текстов (программы и диплом)
    Здесь немного не об этом - я просто обобщил здесь свои находки по совместной правке документов. А я сейчас с SVN переполз на Mercurial. К новому году выдам пост, сейчас работы много.

    @Федір Гонца
    я хоть и работаю в "одиночестве" но использую Bazaar для контроля версий
    Всё равно, что использовать. Главное, чтобы была хотя бы одна копия где-то ещё. Google code хорошо для этого подходит.

    для подстраховки еще Dropbox.
    А это для чего? Можно поподробнее?

    @kostix, 07.06.2010 1:55:00
    Всё-таки "системы управления версиями", а не "контроля" их.
    На мой вкус, так как раз контроля.
    В следующий раз напишу управления :-)

    @Portnov
    Про использование цвета, зачёркивания, заметок на полях итп. для общения соавторов. Я упорно не понимаю, зачем это нужно.
    Потому, что часто соавторы в компьютерах откровенные дятлы. :-)
    Ну и например где-то в тексте хочется соавтору обратить внимание на что-то и попросить переделать фразу.

    Во всех актуальных VCS есть команды diff и blame.
    Это не вариант вообще. Вы будете долго искать в абзаце (а у меня динамический перенос строк), где и что изменилось. Выделить цветом - самое оно.

    вторая - кто какую строку написал.
    Ситуация ещё хуже: например, я использую VCS, а кто-то нет и не хочет.

    всегда можно добавить комментарий (% Перепиши это!).
    Проходили мы это. Не работает - на комментарии часто не обращаешь внимания и работаешь с текстом в DVI. Надо чтоб было видно, отсюда и заморочки с цветом.


    @syslog
    а еще есть \usepackage{rcs}
    О, надо будет посмотреть. Спасибо!

    @Анонимный
    Странно, что про распределённые vcs не написал. Mercurial - наше всё, ящитаю.
    Пост не о том, но про меркуриал это да, оно моё всё теперь (почти переполз на него). Про меркуриал пост будет не раньше декабря, так что потерпите, товарищи :-)

    ОтветитьУдалить
  9. (ответ носит шуточный тон)
    @virens - вобщем-то любой из "облачных" сервисов (Dropbox, UbuntuOne, SpiderOak, самокупленый у "облака") спасает от преждевременных летальных исходов :)... Был случай, записал файлы на диск (usb-backup) и неблагополучно уронил его на бетонный пол, после чего он уже не читался. Если бы не символьная ссылка из рабочего каталога в каталог любого вышеозначенного сервиса, то 5 лет напряженной научной работы испарились вместе с диском. После этого я как "религиозный параноик" начал делать бекапы во все возможные места (не забывая о класике "hard copy", если позволяет сам характер материала). Так же один раз спасла система контроля версий в самом Dropbox. Самое замечательное в этих сервисах или в настроенных бекапах где угодно - это то, что оно само, делает за тебя твою работу, честно и постоянно, даже если ты забыл сделать commit.
    К сожалению сервера личного не имею, да и привязка к одной location не спасает Вас от наводнения или "опа, соседи затопили" :)

    p.s.... странно, я не считал себя параноиком, перечитал и понял, надо завести бекап основных органов. Так же никто случайно не знает как "забекапить" деньги? :)

    ОтветитьУдалить
  10. Для вставки номера ревизий в svn учть такая вещь как keyword. Для mercurial есть одноименное расширение.

    Для всяких todo вставляю в код такую вещь: @todo: Исправь это. Затем скриптом с коммнадой "grep -ni "@todo" `find . -name "*.tex"`" Ищу все todo.

    P.S. использую git.

    ОтветитьУдалить
  11. Когда-то написал такое: http://ro-che.info/docs/dvcs-for-math.html

    Тема мне уже давно не интересна, статья сейчас представляет разве что историческую ценность :) но в конце есть дельные ссылки по теме. (Добавил ссылку и на эту статью.)

    ОтветитьУдалить
  12. @Федір Гонца
    @virens - вобщем-то любой из "облачных" сервисов (Dropbox, UbuntuOne, SpiderOak, самокупленый у "облака") спасает от преждевременных летальных исходов
    Аааа, понял. А то сижу в своей глухой деревне и ничего про такое не слышал. Спасибо!

    К сожалению сервера личного не имею, да и привязка к одной location не спасает Вас от наводнения
    Поэтому я многое стараюсь загрузить в Интернет. И записки в блог в том числе - уж гугловцы-то бекапы делают, правда? :-)

    @Сергей Любимов
    Для вставки номера ревизий в svn учть такая вещь как keyword. Для mercurial есть одноименное расширение.
    Глянем, спасибо.

    Для всяких todo вставляю в код такую вещь: @todo:
    Не, не айс. Надо соавтору написать, что он где-то неправ и чтоб он это увидел. У меня соавторы такие, что на клавиатуре одним пальцем тексты набирают, а вы им про греп :-)

    Roman Cheplyaka, 08.06.2010 0:25:00
    Когда-то написал такое
    Некоторыми ссылками я оттуда пользовался, кстати.

    Тема мне уже давно не интересна
    Знания лишними не бывают - никогда не знаешь, когда пригодятся.

    Добавил ссылку и на эту статью.
    Спасибо.

    ОтветитьУдалить
  13. >> Во всех актуальных VCS есть команды diff и blame.
    > Это не вариант вообще. Вы будете долго искать в абзаце (а у меня динамический перенос строк), где и что изменилось. Выделить цветом - самое оно.

    git diff --color-words :) (скриншотик)

    А ты, virens, не смог-таки избежать традиционного авторского ляпа:
    отследить ревизию документа при обсуждении печатных версий так же проще

    Слушай, а может, ну их, все эти копирайты и ссылки на автора? Ты же и так бессознательно каждую статью метишь не очень заметным знаком :)

    ОтветитьУдалить
  14. @Blogger Minoru

    О, редактора в тред! :-)

    git diff --color-words :) (скриншотик)
    Гит не пройдёт. А скриншотик зачётный.

    А ты, virens, не смог-таки избежать традиционного авторского ляпа
    Таки настаиваю на авторской орфографии.:-)

    Слушай, а может, ну их, все эти копирайты и ссылки на автора?
    Нифига. Буду идти до конца и таки анально карать :-)

    Хотя я уже устал бороться со всякой школотой, которая тупо копипастит мои статьи и фигачит по умолчанию "автор - Пупкин".

    Ты же и так бессознательно каждую статью метишь не очень заметным знаком
    Про ссылку на автора? А ты думаешь, её многие видят!? Кстати, Minoru, набери в гугле "Записки дебианщика" и погугли в районе 5-6 ссылки. У меня тут ещё один двойник объявился - я даже потроллил немного в комментариях. А ты говоришь, лицензию сними...

    ОтветитьУдалить
  15. Последний абзац моего комментария — это шутка по поводу «так же». Типа, зачем ставить копирайты, если эта ошибочка и так явно указывает, что автор статьи — ты? :)

    А касательно блога-двойника — что-то я ничего выдающегося не нашёл. Может, ты мне ссылочку скинешь, а?

    ОтветитьУдалить
  16. Сейчас ещё раз поглядел на скриншот, который запостил ранее — да-а-а, omploader очень красиво прикололся. Короче, розовенькая надпись — это не мой прикол, это таки хостинг веселится. Вот по этой ссылке должно отображаться нормально (на крайняк есть инфо-страничка)

    ОтветитьУдалить
  17. Пакет pdfcomment не пробовал? в TeXLive есть 2009 (за другие не знаю)

    ОтветитьУдалить
  18. (матерясь на отправку комментов в блогпосте)

    пакет pdfcomment не пробовал?

    Ну и... АдобеАкробатРиадер в своей платной иеркорнации умеет вставлять аннотации в документ, об этом писал Евгений Балдин, когда рассказывал, как у него происходила работа с корретором при подготовке книги "LaTeX - Компьютерная типография". Окулар есть и для винды уже, он может тоже аннотации делать, но сохраняет их во вне, но может (Экспорт) делать "архив" самой PDF и мета-данных, к сожалению непортабельно и работает только в Окулар (на какой платформе - без разницы)

    ОтветитьУдалить
  19. @Minoru
    Последний абзац моего комментария — это шутка по поводу «так же». Типа, зачем ставить копирайты, если эта ошибочка и так явно указывает, что автор статьи — ты?
    Ого, как ты тонко меня троллить начал :-) Но да, я от этой ошибки всё отвязаться не могу...

    А касательно блога-двойника — что-то я ничего выдающегося не нашёл.
    Это на тебя негуглёж напал? :-) debiannotes точка ру.

    Сейчас ещё раз поглядел на скриншот, который запостил ранее — да-а-а, omploader очень красиво прикололся.
    На момент просмотра мной, ещё раз прикололся, так что хорош спамить, а то уже тут набежали мерзавцы со своей виагрой и увеличенными членами...

    @h4tr3d
    Пакет pdfcomment не пробовал?
    Хто это?

    в TeXLive есть 2009 (за другие не знаю)
    Ну так то ж свежак...

    (матерясь на отправку комментов в блогпосте)
    Не надо. Ко мне нагрянули спамеры, это я от них комменты на проверку закрыл.

    Ну и... АдобеАкробатРиадер в своей платной иеркорнации
    Ну здрааааааааавстуйте.... :-)
    Платный адобридер, да?

    умеет вставлять аннотации в документ
    Я знаю, пользовался этим, когда статью в Optics Communications отправлял. Удобно.

    Окулар есть и для винды уже
    Одын мынус: по крайней мере в Ленни оно тащит за собой всё КДЕ, а так же предлагает рекомендованные зависимости в виде pulseaudio и xine-ui (что курят мейнтейнеры!?). Что не радует.

    На pdfcomment гляну, спасибо.

    ОтветитьУдалить
  20. >> А касательно блога-двойника — что-то я ничего выдающегося не нашёл.
    > Это на тебя негуглёж напал? :-) debiannotes точка ру.

    Сейчас ещё раз погуглил — на первой странице все ссылки уже фиолетовым подсвечены (посещались, тобишь), кроме одной. Не знаю даже, что и сказать…

    Странно, что двойник вроде как собственные статьи пишет — хотя многие заголовки почему-то смутно знакомы…

    И да, ещё раз извиняюсь за omploader — это они, оказывается, так с хотлинкингом борются. Не смешно и обидно :(

    Кстати, по поводу комментаторов-продавцов: а можно как-то заблокировать конкретному пользователю доступ к комментировнанию? А то меня тоже достают потихоньку. Вроде погуглил — ничего не нашёл, но ты же видишь, я сейчас чуток не в ладах с гуглом :)

    ОтветитьУдалить
  21. И все общение через скомпилированный ps/pdf? Неужели так оказалось удобнее, чем, скажем комменты+багтрекер? Я, например, заметил, что смотрю на результат компиляции в последнюю очередь, преимущественно с кодом работаю.

    ОтветитьУдалить
  22. @Minoru
    Сейчас ещё раз погуглил — на первой странице все ссылки уже фиолетовым подсвечены (посещались, тобишь), кроме одной.
    Да ладно, со всеми бывает :-)

    Странно, что двойник вроде как собственные статьи пишет
    Вроде как. И там в названии многоточие. То есть как кроссовки Абибас и бытовая техника Borsh (Борщ).

    И да, ещё раз извиняюсь за omploader — это они, оказывается, так с хотлинкингом борются.
    Use google picasa, Luke! :-)

    Кстати, по поводу комментаторов-продавцов: а можно как-то заблокировать конкретному пользователю доступ к комментировнанию?
    Нет, нельзя. Стукануть в гугл на спам в блогах можно (кстати, закрывают быстро). Мой путь борьбы - предпросмотр комментариев. Да, это не так здорово. Первые 3-4 дня комменты к последнему посту открыты.

    Вроде погуглил — ничего не нашёл
    Народ тут кстати нагуглил Discuss - это сервис на другом ресурсе, который можно прикрутить к блоггеру. Мне эта идея конкретно не нравится (и она, увы, начала расползаться по блогам): тормозное оно, и часто не удаётся отправить комменты вообще. И потом, картинки на одном сервере, комменты на другом, блог на третьем... Если что-то накроется, поедет весь блог. Пусть лучше оно всё на гугле варится - если уж там что поломается, так уж глобально :-)

    @Mr. Cat
    И все общение через скомпилированный ps/pdf? Неужели так оказалось удобнее, чем, скажем комменты+багтрекер?
    Кэт, ты вообще о чём? Какой багтрекер!? Эти гаврики в МИФИ до сих пор кое-где используют дискеты, набивают отступы в вордовых документах пробелами и корячатся с набором формул в виде символов шрифта Symbol. А как они рисуют диаграммы - это просто мажор в миноре. Да что там говорить - ты просто на сайт МИФИ зайди и пройдись по кафедральным сайтам по ссылкам. После этого приходи обратно и поделись впечатлениями :-)

    Я там со своим Дебианом, ЛаТеХом и SVNом смотрелся, как Алиса Селезнёва с миилафоном - гостья из будущего. Причём судя по всему, из очень отдалённого.

    Я, например, заметил, что смотрю на результат компиляции в последнюю очередь, преимущественно с кодом работаю.
    Ясное дело, я тоже так работаю, но народ требовал PDF (хотя бы) и чтоб там было видно, где и что я правил.

    ОтветитьУдалить
  23. по пунктам:
    1 отлично
    2 отлично
    3 использую \begin{comment}texttext\end{comment}
    Можно отметить не самое оптимальное использование VCS, но это видимо связано с организацией работы в целом.
    Да, я за mercurial.
    u995.livejournal.com

    ОтветитьУдалить
  24. Миш, кат куда-то делся. Или его и не было?..

    ОтветитьУдалить
  25. > На мой взгляд, централизованные системы здесь предпочтительнее (всегда знаешь, где последняя ревизия)

    пацтулом. зачет! к чему только лень не приводит))

    ОтветитьУдалить
  26. @Анонимный
    3 использую \begin{comment}texttext\end{comment}
    Условия задачи другие БЫЛИ: я один латехник среди вордодятлов и они ничего кроме вёрда и пидиэфа не переваривают.

    Можно отметить не самое оптимальное использование VCS
    А в чём неоптимальность?

    Да, я за mercurial.
    Это да, но он не всегда удобен. Я всё жду, пока кого-то осенит гениальная мысль научить kdesvn понимать hg-репы. То, что сейчас есть из графики для просмотра репозитория - это просто убогость какая-то.

    @Minoru,
    Миш, кат куда-то делся. Или его и не было?..
    Лениво. Всё равно один пост отображается...

    @Анонимный,
    > На мой взгляд, централизованные системы здесь предпочтительнее (всегда знаешь, где последняя ревизия)

    пацтулом. зачет! к чему только лень не приводит))

    А это как вам будет удобнее. DVCS хорошо применять там, где про них слышал хотя бы кто-нибудь кроме автора. А в России, как обычно, полная дремучесть в технологиях сложнее кувалды, тем более в информационных.

    ОтветитьУдалить
  27. Прошу прощения за небольшое опоздание... :) Есть еще один интересный пакет: todonotes. Позволяет добавлять комментарии в стиле Word, и немного больше (например, создавать список тех самых комментариев). К сожалению, нет встроенных функций, ориентированных на нескольких редакторов, но их можно доопределить самостоятельно.

    ОтветитьУдалить
  28. Относительно неплохой вариант это gitlab (можно свою инсталляцию, можно gitlab.com), каждый участник может вносить правки в форке, а потом отправлять на ревизию автору.
    Однако не хватает возможности произвольно комментировать как это легко делается во всяких вордах, я даже им хотелку такую написал
    http://feedback.gitlab.com/forums/176466-general/suggestions/9441417-comment-to-any-part-word-line-paragraph-of-any-t
    можно голосовать, авось добавят

    ОтветитьУдалить