LaTeX Minted-Paket mit benutzerdefiniertem Ausgabeverzeichnis=Build

LaTeX Minted-Paket mit benutzerdefiniertem Ausgabeverzeichnis=Build

Gegeben sei das folgende LaTeX-Dokument ( minimal.tex):

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

Ich kann es bauen mit:

pdflatex -shell-escape  minimal.tex

Ich möchte die Build-Dateien aber gerne in einem anderen Verzeichnis ablegen, also verwende ich -output-directory=buildetwa:

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

Aber so bekomme ich:

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

Es minimal.pygbefindet sich eigentlich im buildVerzeichnis, wird aber anscheinend nicht gefunden.

Was kann ich machen?

Antwort1

Sie müssen \usepackage[outputdir=build]{minted}Minted mitteilen, wohin die Dateien gegangen sind.

Antwort2

currfile-abspathSie können (ein Unterpaket von ) verwenden, currfileum das Ausgabeverzeichnis von minted automatisch festzulegen. Muss vor dem Laden des mintedPakets erfolgen.

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

Funktioniert anscheinend nicht zuverlässig mit MiKTeX, siehehttps://github.com/gpoore/minted/issues/268

Antwort3

Ich hoffe, die Leser haben nichts dagegen, dass ich die Antwort von David Carlisle erläutere. Ich habe die Frage im Laufe der Jahre auf so viele verschiedene Arten gestellt gesehen. Ich sehe jedoch keine Erwähnung der Bedeutung von ProjektWegbeim Laden des Minted-Pakets.

Als einzelner Entwickler und Autor habe ich vor Kurzem von TexStudio auf das TeXiFy-Plugin für IntelliJ IDEA umgestiegen. Ich schreibe in diesem Kontext. Ich bin mit diesen Produkten nicht verbunden.

Ich behebe Ausnahmen bei der Minted-Codeauflistung durch die Einstellung\usepackage[outputdir=../auxil]{geprägt}.

Minted.stybasiert während der Kompilierung auf dem Python Pygments-Paket und seiner Zwischendatei zur Hilfsausgabe. Der Prozess: Latex-Pakete laden, Kompilierung beginnen, Codefragmente mit dem Minted-Paket in eine Zwischenkompilierungsdatei .pyg<...> kompilieren, die Datei während der PDF-Ausgabe sammeln, PDF-Ausgabeverarbeitung abschließen. Wenn sich die Zwischendatei .pyg<...> nicht im erwarteten Ordner befindet, tritt eine PDF-Ausgabeausnahme auf.

Das Kompilieren von Code mit dem Latex-Paket minted.sty entspricht einer standardmäßigen stammbasierten Ordnerstruktur. Wo auch immer sich das Projekt in einer Ordnerhierarchie befindet, das ist die Standardeinstellung. Das standardmäßige TeXiFy-Plugin entspricht nicht den Standardstrukturen von IntelliJ IDEA Ultimate (oder der IDE Ihrer Wahl), an die es sich zwangsläufig halten muss, wie es bei Plugins der Fall ist. Dementsprechend sucht das TeXiFy IDEA-Plugin beim Kompilieren nach einer .pyg<...>-Datei am falschen Ort. Standardmäßig ist hier die kompilierte Struktur für das einfache MWE unten...

geprägte-Ausgabeverzeichnis-Hierarchie

Mit Latex ...

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

Es erzeugt eine Ausnahme ...

Fehler: Infile kann nicht gelesen werden: [Errno 2] Keine solche Datei oder kein solches Verzeichnis: „minted-mwe.pyg“ P:\Writing-and-WritingSoftware\DevelopmentBooklets\VanElectrical\TexifyMintedTest\src_minted-minted-mwe\097AF5BD36CFF0D87D9991A6653D1FBAC2C2A1FBB8430C5273284E8D3B9D57CD.pygtex konnte nicht gefunden werden

Das ist richtig. Die .pyg<...>-Datei sollte NICHT unter \TexifyMintedTest\ gesucht werden.QuelleOrdner, es ist in\hilfsOrdner.

Durch Ändern derAusgabeverzeichnisOrdnerVerwenden des richtigen Dateipfadsbeim Laden von minted.sty sucht der Kompilierungsprozess die .pyg<...>-Datei an der richtigen Stelle …

minted-outputdir tex

HTH-Laien ...

verwandte Informationen