Пакет LaTeX Minted с использованием пользовательского output-directory=build

Пакет LaTeX Minted с использованием пользовательского output-directory=build

Дан следующий документ LaTeX ( minimal.tex):

\documentclass{article}
\usepackage{minted}
\begin{document} 
\begin{minted}{c} 
int main() {
    printf("hello, world");
    return 0;
}
\end{minted} 
\end{document}

Я могу построить это с помощью:

pdflatex -shell-escape  minimal.tex

Но я хотел бы поместить файлы сборки в другой каталог, поэтому я использую -output-directory=build, например:

pdflatex -shell-escape -output-directory=build minimal.tex

Но таким образом я получаю:

...
(/usr/local/texlive/2016/texmf-dist/tex/latex/xcolor/xcolor.sty
(/usr/local/texlive/2016/texmf-dist/tex/latex/graphics-cfg/color.cfg)
(/usr/local/texlive/2016/texmf-dist/tex/latex/pdftex-def/pdftex.def
(/usr/local/texlive/2016/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
[Loading MPS to PDF converter (version 2006.09.02).]
))) (./_minted-minimal/default-pyg-prefix.pygstyle)Error: cannot read infile: [Errno 2] No such file or directory: 'minimal.pyg'
system returned with code 256


! Package minted Error: Missing Pygments output; \inputminted was
probably given a file that does not exist--otherwise, you may need 
the outputdir package option, or may be using an incompatible build tool.

See the minted package documentation for explanation.
Type  H <return>  for immediate help.
 ...                                              

l.9 \end{minted}

На самом деле он minimal.pygнаходится внутри buildкаталога, но, похоже, его не удается найти.

Что я могу сделать?

решение1

Вам нужно \usepackage[outputdir=build]{minted}сообщить minted, куда делись файлы.

решение2

Вы можете использовать currfile-abspath(подпакет currfile) для автоматической установки выходного каталога minted. Это необходимо сделать до загрузки mintedпакета.

\usepackage{currfile-abspath}
\getabspath{\jobname.log}
\ifthenelse{\equal{\theabsdir}{\thepwd}}% using ifthen package
%\ifdefstrequal{\theabsdir}{\thepwd}% using etoolbox package
    {}{\PassOptionsToPackage{outputdir=\theabsdir}{minted}}

По-видимому, не работает надежно с MiKTeX, см.https://github.com/gpoore/minted/issues/268

решение3

Надеюсь, читатели не будут возражать, если я расширю ответ Дэвида Карлайла. Я видел, как этот вопрос задавали разными способами на протяжении многих лет. Однако я не вижу упоминания о важности проектапутьпри загрузке пакета Minted.

Как индивидуальный разработчик и писатель я недавно перешел с TexStudio на плагин TeXiFy для IntelliJ IDEA. Я пишу в этом контексте. Я не связан с этими продуктами.

Я разрешаю исключения листинга кода Minted, устанавливая\usepackage[outputdir=../auxil]{отчеканено}.

Minted.styопирается на пакет Python Pygments и его промежуточный вспомогательный выходной файл во время компиляции. Процесс: загрузка пакетов Latex, начало компиляции, компиляция фрагментов кода с пакетом Minted в промежуточный файл компиляции .pyg<...>, сбор файла во время вывода PDF, завершение обработки вывода PDF. Если промежуточный .pyg<...> отсутствует в ожидаемой папке, возникнет исключение вывода PDF.

Компиляция кода с пакетом Latex minted.sty соответствует структуре папок по умолчанию на основе корня. Где бы проект ни находился в иерархии папок, это и есть структура по умолчанию. Плагин TeXiFy по умолчанию не соответствует структурам по умолчанию IntelliJ IDEA Ultimate (или вашей IDE по выбору), которым он неизбежно обязан соответствовать, как и плагины. Соответственно, когда плагин TeXiFy IDEA компилируется, он ищет файл .pyg<...> в неправильном месте. По умолчанию ниже приведена скомпилированная структура для простого MWE...

minted-outputdir-иерархия

Использование латекса...

\documentclass[11pt]{article}
% Packages
\usepackage{minted}
% Document
\begin{document}
    \begin{minted}{php}
    <?php
        $x = 1;
        if($x=1){
            echo "x=1";
        } else {
            echo "x=" . $x;
        }
    ?>
    \end{minted}
\end{document}
}

Это создает исключение...

Ошибка: невозможно прочитать входящий файл: [Errno 2] Такого файла или каталога нет: 'minted-mwe.pyg' Не удалось найти P:\Writing-and-WritingSoftware\DevelopmentBooklets\VanElectrical\TexifyMintedTest\src_minted-minted-mwe\097AF5BD36CFF0D87D9991A6653D1FBAC2C2A1FBB8430C5273284E8D3B9D57CD.pygtex

Это верно. Файл .pyg<...> НЕ следует искать в \TexifyMintedTest\источникпапка, она находится в\вспомогательныйпапка.

Изменяяoutputdirпапкаиспользуя правильный путь к файлупри загрузке minted.sty процесс компиляции будет искать файл .pyg<...> в правильном месте...

minted-outputdir tex

HTH неспециалисты...

Связанный контент