
С некоторой помощью отпредыдущий вопрос TexStudio и arara, мне удалось начать работу с arara внутри TexStudio (Ура!). Но при запуске компиляции Xelatex (второй пример кода в только что указанном URL) я получил это сообщение об ошибке (компиляция не была завершена):
(/usr/local/texlive/2022/texmf-dist/tex/latex/supertabular/supertabular.sty
))
(/usr/local/texlive/2022/texmf-dist/tex/latex/glossaries/styles/glossary-tree.s
ty
))
(/usr/local/texlive/2022/texmf-dist/tex/latex/l3backend/l3backend-xetex.def
! I can't find file `"|extractbb --version"'.
<to be read again>
\scan_stop:
l.72 \l__sys_internal_tl
(Press Enter to retry, or Control-D to exit)
Please type another input file name:
runpopen command not allowed: extractbb
extractbb
существует и (на моем компьютере) находится в/usr/local/texlive/2022/bin/x86_64-linux/extractbb
Просто предположение: возможно ли, что проблема не столько в пути ( 'I can't find file `"|extractbb --version'
), сколько в разрешении оболочки ( runpopen command not allowed : extractbb
)??? Буду признателен за любые предложения по исправлению!
------редактировать, следовать комментарию Дэвида Карлайла относительно texmf.cfg-----
Мои единственные изменения в моем «личном» texmf.cfg — это добавление
shell_escape_commands = pagelayoutapi
тогда какнеизмененный,"general" texmf.cfg в /usr/local/texlive/2022/texmf-dist/web2c/texmf.cnf
указывает, что
% The default is true, because we already avoid adding the standard
% extension(s) in the usual cases. E.g., babel.sty will only look for
% babel.sty, not babel.sty.tex, regardless of this setting.
try_std_extension_first = t
% Enable system commands via \write18{...}. When enabled fully (set to
% t), obviously insecure. When enabled partially (set to p), only the
% commands listed in shell_escape_commands are allowed. Although this
% is not fully secure either, it is much better, and so useful that we
% enable it for everything but bare tex.
shell_escape = p
% No spaces in this command list.
%
% The programs listed here are as safe as any we know: they either do
% not write any output files, respect openout_any, or have hard-coded
% restrictions similar to or higher than openout_any=p. They also have
% no features to invoke arbitrary other programs, and no known
% exploitable bugs. All to the best of our knowledge. They also have
% practical use for being called from TeX.
%
shell_escape_commands = \
bibtex,bibtex8,\
extractbb,\
gregorio,\
kpsewhich,\
makeindex,\
repstopdf,\
r-mpost,\
texosquery-jre8,\
EDIT - ответ на ответ egreg Я пересмотрел, /usr/local/texlive/2022/texmf.cnf
потому что, хотя изменения egreg фактически решили проблему, инструкции (предоставленные в виде комментариев внутри файла) противоречат, они указывают, что вы должны внести изменения ТОЛЬКО в этот файл, а НЕ все исходные строки, присутствующие в /usr/local/texlive/2022/texmf-dist/web2c/texmf.cnf
:
% (Public domain.)
% This texmf.cnf file should contain only your personal changes from the
% original texmf.cnf (for example, as chosen in the installer).
%
% That is, if you need to make changes to texmf.cnf, put your custom
% settings in this file, which is .../texlive/YYYY/texmf.cnf, rather than
% the distributed file (which is .../texlive/YYYY/texmf-dist/web2c/texmf.cnf).
% And include *only* your changed values, *NOT A COPY OF THE WHOLE THING!* [caps added here for emphasis--Birdman]
%
Я продолжаю этот разговор, потому что мне хотелось бы узнать, неправильно ли я истолковал это предостережение (--> не копировать все целиком), или же эти инструктивные комментарии сами по себе ошибочны.
решение1
Это определенно вина вашей модификации. С
shell_escape_commands = pagelayoutapi
вы позволяететолькоприложение pagelayoutapi
в ограниченном shell-escape. Если вы попробуете
kpsewhich --var-value shell_escape_commands
из командной строки вы должны просто увидеть
pagelayoutapi
(только что опробовал на своей машине).
При изменении файла верхнего уровня необходимо скопировать весь список и добавить к нему texmf.cnf
:
shell_escape_commands = \
bibtex,bibtex8,\
extractbb,\
gregorio,\
kpsewhich,\
makeindex,\
repstopdf,\
r-mpost,\
texosquery-jre8,\
pagelayoutapi,\
Как texmf.cnf
работает чтение?
Обычно в дереве TeX есть два texmf.cnf
файла. Один находится на верхнем уровне, другой — в texmf-dist
. Вывод
kpsewhich -a texmf.cnf
на моей машине есть
/usr/local/texlive/2022/texmf.cnf
/usr/local/texlive/2022/texmf-dist/web2c/texmf.cnf
Таких файлов может быть больше, но важно знать, что они считываются в порядке, указанном в kpsewhich -a
.
Значения переменных, которые задаются в файле,нетпереопределено более поздними файлами. В «главном» (но последнем прочитанном) файле есть рекомендация, а именно
% That is, if you need to make changes to texmf.cnf, put your custom
% settings in this file, which is .../texlive/YYYY/texmf.cnf, rather than
% the distributed file (which is .../texlive/YYYY/texmf-dist/web2c/texmf.cnf).
% And include *only* your changed values, *NOT A COPY OF THE WHOLE THING!* [caps added here for emphasis--Birdman]
«НЕ КОПИЮ ВСЕГО» означает, что не добавляется каждая переменная, а только те, значение которых нужно изменить. Если вы добавите все, инициализация будет медленнее, поскольку многие значения нужно будет прочитать и отбросить.
texmf.cnf
Если вы скажете в файле верхнего уровня
shell_escape_commands =
Никакая внешняя программа не допускается в ограниченной оболочке. Переменные не устанавливаются пошагово: последующие строки, начинающиеся с этого значения, игнорируются.