Pacote LaTeX Minted usando output-directory=build personalizado

Pacote LaTeX Minted usando output-directory=build personalizado

Dado o seguinte documento LaTeX ( minimal.tex):

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

Posso construí-lo com:

pdflatex -shell-escape  minimal.tex

Mas eu gostaria de colocar os arquivos de compilação em outro diretório, então uso -output-directory=build, como:

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

Mas desta forma eu consigo:

...
(/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}

Na minimal.pygverdade, está dentro builddo diretório, mas parece não ter sido encontrado.

O que posso fazer?

Responder1

Você precisa \usepackage[outputdir=build]{minted}informar ao minted para onde foram os arquivos.

Responder2

Você pode usar currfile-abspath(um subpacote de currfile) para definir o diretório de saída do minted automaticamente. Deve ser feito antes de carregar o mintedpacote.

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

Aparentemente não funciona de forma confiável com o MiKTeX, vejahttps://github.com/gpoore/minted/issues/268

Responder3

Espero que os leitores não se importem que eu expanda a resposta de David Carlisle. Já vi essa pergunta ser feita de muitas maneiras ao longo dos anos. No entanto, não vejo menção à importância do projetocaminhoao carregar o pacote Minted.

Como desenvolvedor e escritor individual, mudei recentemente do TexStudio para experimentar o plugin TeXiFy para IntelliJ IDEA. Escrevo nesse contexto. Não estou associado a esses produtos.

Eu resolvo exceções de listagem de código Minted definindo\usepackage[outputdir=../auxil]{cunhado}.

Cunhado.stydepende do pacote Python Pygments e é um arquivo de saída auxiliar de estágio intermediário durante a compilação. O processo: carregar pacotes Latex, começar a compilar, compilar fragmentos de código com o pacote Minted em um arquivo de compilação intermediário .pyg<...>, coletar o arquivo durante a saída do PDF, concluir o processamento da saída do PDF. Se o intermediário .pyg<...> não estiver na pasta esperada, ocorrerá uma exceção de saída em PDF.

A compilação do código com o pacote Latex minted.sty está em conformidade com uma estrutura de pastas padrão baseada em raiz. Onde quer que o projeto esteja em uma hierarquia de pastas, esse é o padrão. O plug-in TeXiFy padrão não --- ele está em conformidade com as estruturas padrão do IntelliJ IDEA Ultimate (ou o IDE de sua escolha), que é inevitavelmente obrigado a cumprir, como fazem os plug-ins. Conseqüentemente, quando o plugin TeXiFy IDEA é compilado, ele procura um arquivo .pyg<...> no lugar errado. Por padrão, aqui está a estrutura compilada para o MWE simples abaixo...

hierarquia de saída cunhada

Usando látex...

\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}
}

Produz exceção...

Erro: não é possível ler o arquivo: [Errno 2] Nenhum arquivo ou diretório: 'minted-mwe.pyg' Não foi possível encontrar P:\Writing-and-WritingSoftware\DevelopmentBooklets\VanElectrical\TexifyMintedTest\src_minted-minted-mwe\097AF5BD36CFF0D87D9991A6653D1FBAC2C2A1FBB8430C5 273284E8D3B9D57CD.pygtex

Está correto. O arquivo .pyg<...> NÃO deve ser procurado em \TexifyMintedTest\fontepasta, está em\auxilpasta.

Ao alterar odiretório de saídapastausando o caminho de arquivo corretoao carregar o minted.sty, o processo de compilação irá buscar o arquivo .pyg<...> no local correto...

saída cunhadadir tex

Não especialistas em HTH...

informação relacionada