Скомпилируйте текстовый файл XeLaTeX с помощью latexmk

Как можно скомпилировать XeLaTeX текстовый документ, используя latexmk в Mac OS X?

В настоящее время я запускаю latexmk job.tex и получаю сообщение об ошибке:

! 
 ********************************************
 * XeTeX is required to compile this document.
 * Sorry!
 ********************************************.
\RequireXeTeX ...********************************}
                                                  \endgroup \fi 
l.18 \RequireXeTeX

? ^D
! Emergency stop.
\RequireXeTeX ...********************************}
                                                  \endgroup \fi 
l.18 \RequireXeTeX

Первая строка моего tex-файла (как предложено это сообщение):

% !TEX TS-program = xelatexmk

и я пробовал другие (например, program=xelatex), но безрезультатно.

latexmk описывает свои команды следующим образом:

$ latexmk -commands xelatex job
Commands used by latexmk:
   To run latex, I use "latex %O %S"
   To run pdflatex, I use "pdflatex %O %S"
   ...

Кажется, не существует какого-либо логического механизма для выбора текстовой программы из командной строки, и из источника также неясно, как это можно сделать.

Я также просмотрел rubber, но, похоже, работать либо.

Я ценю любое понимание, которое вы можете предоставить.

Брайан


person Brian M. Hunt    schedule 26.06.2010    source источник
comment
Какую версию latexmk вы используете? Помимо оригинала, есть версия latexmk для Texshop, поддерживаемая Гербертом Шульцем, или версия Texlive по умолчанию, разработанная Джоном Коллинзом? Посмотрите на вывод для latexmk -v, чтобы увидеть, какой именно. Только версия Texshop поставляется в комплекте с xelatexmk и распознает директивы !TEX; с версией jcc вам нужно будет написать файл RC для вызова xelatex и как обращаться с файлами xdv.   -  person Charles Stewart    schedule 28.06.2010
comment
@Charles - спасибо за пост - это очень полезно. Я использую версию Джона Коллинза от Texlive.   -  person Brian M. Hunt    schedule 29.06.2010


Ответы (5)


Это мое быстрое решение, чтобы latexmk работало с XeLaTeX:
Добавить

`elsif (/^-xelatex$/) { $pdf_mode = 1; $pdflatex = 'xelatex %O %S'; $pdf_previewer =
'start evince %O %S';}`

над (или около) линией

`elsif (/^-pdf$/) { $pdf_mode = 1; }`

.

Затем вы можете позвонить latexmk -xelatex file.tex. Работает, но сильно не проверял. Аналогично должно работать с lualatex.

person andre-r    schedule 29.07.2010
comment
Я добавлю параметр -xelatex в latexmk в следующей версии (4.31). Это будет работать так же, как приведенная здесь модификация (за исключением настройки средства предварительного просмотра для показа). - person John Collins; 24.12.2011
comment
Спасибо за реализацию! Очень полезный переключатель! - person Chris; 31.10.2012
comment
Примечательно, что начиная с версии 4.24 вы можете получить тот же эффект, выполнив latexmk -pdflatex='xelatex %O %S' -pdf [...] вместо изменения сценария latexmk. Это немного многословно, но выполняет свою работу. Если/когда будет добавлен флаг, я бы предпочел, чтобы он основывался на переменной $xelatex. Таким образом, мы можем определить переменную в ~/.latexmkrc для передачи флагов и т. д., как мы делаем сейчас с $latex и $pdflatex. - person wren romano; 06.12.2012

latexmk -v
Latexmk, John Collins, 16 January 2010. Version 4.13a

я кладу

$pdflatex = 'xelatex --shell-escape %O %S';

в моем файле .latexmkrc. Это обходной путь, конечно. Но это работает для меня, когда я звоню

latexmk -pvc -pdf MyXetexFile
person Kay Smarczewski    schedule 13.06.2011

$ latexmk -v
Latexmk, John Collins, 27 July 2010. Version 4.18

Я запускаю с командой:

latexmk -pdf -e '$pdflatex=q/xelatex %O %S/' foo.tex

что в основном то же самое, что и ответы от andre-r и Kay, но только из командной строки.

person RolKau    schedule 17.07.2011

latexmk --xelatex job.tex Теперь аргумент допустим в этой простой форме.

person בנימן הגלילי    schedule 25.05.2018

В версии: 4.65 (18 июня 2019 г.) есть разница между использованием параметра -xelatex и установкой -pdflatex, как это предлагается в одном из комментариев.

Вариант 1: -кселатекс

$ latexmk -xelatex file.tex

С параметром -xelatex или параметром -pdfxe текстовый файл сначала набирается в формате xdv (расширенный DVI). файл. Затем вызывается xdvipdfmx для преобразования файла xdv в файл pdf.

В latexmk $xelatex_default_switches устанавливается на -no-pdf (строка 395), чтобы xelatex создавал файл xdv вместо файла PDF по умолчанию.

Следовательно, опция -xelatex эквивалентна:

$ xelatex -no-pdf file.tex  # called one or more times to produce file.xdv
$ xdvipdfmx file.xdv        # called only once in the end

Вариант 2: -pdflatex=xelatex

Второй вариант — установить pdflatex следующим образом вместе с включением опции -pdf:

# %O is a substitution for options and %S is for source file
$ latexmk -pdflatex='xelatex %O %S' -pdf file.tex

В этом подходе xelatex используется для создания файла PDF напрямую, без создания промежуточного выходного файла. Обратите внимание, что сегодня xelatex сначала генерирует поток xdv и внутренне передает его xdvipdfmx для создания PDF-файла.

Следовательно, этот подход эквивалентен:

$ xelatex file.tex     # called one or more times to produce file.pdf

Обновлено 2019.08.31 из комментария user36296.

person user650654    schedule 31.08.2019
comment
Во втором варианте промежуточный файл будет генерироваться внутри и преобразовываться в pdf при каждом запуске. Поэтому этот вариант немного медленнее, чем первый вариант, когда преобразование в pdf выполняется только один раз в конце. - person samcarter_is_at_topanswers.xyz; 31.08.2019