LINUX.ORG.RU

Emacs org-mode export latex/pdf

 ,


1

1

Здравствуйте!

Ситуация следующая. Есть Emacs 26 с org-mode на Windows. При экспорте документа org-export-dispath в pdf возникает ошибка. Проблема оказалась в кодировках. Сам org-файл в cp1251, но получающийся файл .tex в utf8. Возник вопрос: как заставить org-mode создавать tex-файл в cp1251?

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

Может проще хранить исходник в utf?

Удивительно вообще, откуда ругань идет. Неужели LaTeX в виндах utf8 не умеет? Умеет вроде. Просто попросить, чтобы заголовок inputenc писал utf8. Там можно это делать либо в самом org-файле, либо переменной.

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

поставь нормальный шел/терминал на окаянную.

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

А я проверил - у меня работает, но в Linux.

(setq org-export-coding-system 'cp1251)

Исходник test.org (в UTF-8)

* Тест
** Тест 1

Далее делаю вручную конвертацию в LaTeX, чтобы было явно видно: M-x org-latex-export-to-latex

На выходе получаем (приведу только интересующее и то, как это видно в буфере с кодировкой utf-8, поэтому символы cp1251 в octal):

...
\usepackage[utf8]{inputenc}
...
\section{\322\345\361\362}
\label{sec-1}
\subsection{\322\345\361\362 1}
\label{sec-1-1}
...

Как видно, весь текст в cp1251, но inputenc в utf8, потому что она автоматически по кодировке исходного буфера подставилась. Я не знаю, что у тебя подставляется - покажи или проверь сам. Это значение тоже конфигурируется.

А вот если (setq org-export-coding-system nil), то есть кодировка из кодировки буфера берется:

...
\usepackage[utf8]{inputenc}
...
\section{Тест}
\label{sec-1}
\subsection{Тест 1}
\label{sec-1-1}
...
Zubok ★★★★★ ()
Последнее исправление: Zubok (всего исправлений: 2)
Ответ на: комментарий от Dred

После перезагрузки возвращается в 866. Причем shell как был 1251 так и остается

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

Ну, значит, добавь в org-файл строчку и проверь. Я не знаю точно, умеет ли org-mode понимать другие варианты кодировок.

#+LATEX_HEADER: \usepackage[cp1251]{inputenc}

Или как там кодировка указывается для cp1251? Я за давностью лет не помню (в 2003 году использовал MiKTeX, а дальше уже всё).

Zubok ★★★★★ ()
Последнее исправление: Zubok (всего исправлений: 2)
Ответ на: комментарий от Zubok

Или используй org-latex-inputenc-alist со значением ("utf8" . "cp1251").

P.S. У меня тоже при буфере в windows-1251 подставил utf8. Так что именно в этом месте надо смотреть, умеет ли он подставлять то что надо в принципе. Но есть возможноть ему явно указать.

Zubok ★★★★★ ()
Последнее исправление: Zubok (всего исправлений: 2)

Изменил глобально кодировку WINDOWS на utf8 Заработало, но! Теперь некорректно отображаются дата и день недели в mode-line

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

Я, если честно, не очень понимаю сущность проблемы. MiKTeX же должен понимать файлы utf8 и [utf8]{inputenc}. Зачем переводить файлы в cp1251? Пусть tex-файл будет в utf8, pdflatex (или кто там в виндах?) его нормально обработает и выдаст валидный pdf. Почему ты вдруг решил, что проблема с кодировкой? Какие-то особые ошибки на этот счет? Может, проблема в какой-то настройке MiKTeX?

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

Не благодари...

(defun windows? ()
  "return true if Windows"
  (eq system-type 'windows-nt))

;; This is windows only
;; I have finally solved the problem of external processes to use Russian language,
;; Now rg.exe can actually search Russian words from Emacs.
(when (windows?)
  (setq default-process-coding-system '(utf-8-dos . cp1251-dos)))

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

Проблема в том, что если я ставлю кодировку на utf-8, то нормально работает конвертация файлов org. Но не корректно отображается shell. А если кодировка windows-1251, то не работает конвертация, но нормально отображается shell. Конвертация не идет именно из-за несоответствия кодировки конвертируемого файла и файла на выходе.

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

Это позволит в файлах писать на русском в utf-8 и искать в них на русском грепом или рипгрепом из емакса...

Соответственно латех не надо будет гнуть кодировками.

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

Получилось так:

;; КОДИРОВКИ
(prefer-coding-system 'windows-1251)
(prefer-coding-system 'utf-8) ;; Определяется первой

Если этот внести в .emacs и файлы все в utf8 по умолчанию и shell работает корректно

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