| LaTeX и несознательные редакции |
May. 5th, 2008|08:10 pm |
Отдельные несознательные редакции не принимают статьи в Латехе и требуют doc или rtf. В первом приближении проблема решается просто - исходный теховский файл конвертируется в rtf с помощью программы latex2rtf, проверяется OO и засылается в редакцию. Траблы начинаются когда редакция присылает правку. Поскольку в несознательных редакциях редакторы, как правило, не могут связно изложить свои замечания в виде отдельного связного текста, то обычно присылают тот же rtf, перечерканный красными репликами редактора. Причём бывает, что правка требуется такого сорта, что необходимо не только добавить пару строк, но и вставить дополнительную поясняющую ссылку. Т.е. как раз та работа, которую лучше всего делать в LaTeX. Но если им просто послать исправленный rtf, конвертированный из исправленного latex-исходника, то редакция начинает возмущаться - Как же так, у нас редакторы уже забыли, какие они замечания вам выставляли, не могли бы вы отредактировать текст, чтобы ваши исправления выделялись красненьким?
Поскольку явсе равно держу исходники в svn-репозитории на https (так удобнее работать с нескольких компьютеров), то почему бы не воспользоваться svn diff?
Т.е. перед первой засылкой в редакцию законченный теховский файл копируется в release. Типа svn copy ./ https://repo.ru/svn/Articles/tags/Article-1ed После того как получен от редакции исправленный текст в rtf, он открывается с помощью soffice, и в latex-файл вносится необходимая правка. После этого делается второй release svn copy ./ https://repo.ru/svn/Articles/tags/Article-2ed Осталось только сделать svn diff. Однако не всё так просто.
Обычный diff заточен под программистов, для которых минимальный квант текста - это строка. Поэтому работает он построчно. Это не совсем то, что нужно для обычного текста, где сверка должна делаться по словам. К счастью такие инструменты есть - более старый wdiff - http://ftp.gnu.org/gnu/wdiff/ и более новый dwdiff - http://os.ghalkes.nl/dwdiff.html Берем последний, по функциональности они примерно одинаковы, но wdiff какой-то очень замшелый. Причем оба они делают не diff, а сплав из старого и нового текста. Но это даже к лучшему.
Потом выясняем, что svn diff позволяет сменить свой внутренний diff на внешнюю команду, но при этом продолжает слать этой внешней команде много неотключаемого мусора, так что ввод и вывод придется фильтровать с помощью такого баш-скрипта svn-tex-diff.sh:
#!/usr/bin/bash case $1 in '--second-pass') echo "%%% $3" echo "%%% $5" dwdiff -1 -w "\\color{blue}" -x "\\color{black}" -y "\\color{red}" -z "\\color{black}" $6 $7 ;; *) svn diff -x '--second-pass' --diff-cmd "./svn-tex-diff.sh" $@ | sed -r -e '1,2{s/.*/%/g}' esac
Запускается он таким образом ./svn-tex-diff.sh https://repo.ru/svn/Articles/tags/Article-1ed/article.tex https://repo.ru/svn/Articles/tags/Article-2ed/article.tex и на выходе имеем теховский файл, где весь добавленный текст окружен блоками \color{red} - \color{black}. Если в скрипте у вызова dwdiff убрать ключик -1, то он и удаленный текст будет отмечать - только синим цветом. Не забудьте только в преамбуле добавить \usepackage{color} - latex2rtf, несмотря на свою общую ограниченность, этот пакет правильно интерпретирует, так что на выходе имеем исправленный rtf с добавленным текстом, отмеченным красненьким. Редакция будет в восторге.
Единственный недостаток - если исправления попадают внутрь verbatim окружения (где команды не интерпретируются) или в преамбулу (что приводит к ошибкм latex). Но в остальном метод работает весьма неплохо. |
|