web-dev-qa-db-fra.com

Inclure le fichier * .sty d'un super / sous-répertoire du fichier * .tex principal

Je souhaite partager un document latex via git avec de nombreuses autres personnes. Par conséquent, nous avons décidé de mettre tous les fichiers sty spéciaux, qui ne sont pas présents dans l'installation latex de tout le monde, dans un répertoire de ressources. Ce serait cool, si ce dir était un superdir. du répertoire de travail réel Comment puis-je importer ces fichiers de style exactement?

Il est important que même les dépendances de ces styles distants soient résolues avec d'autres styles distants.

32
wuschelhase

Vous pouvez importer un fichier de style (mystyle.sty) dans votre document de deux manières:

  1. Si vous l'avez dans votre chemin ou dans le même dossier que le .tex fichier, incluez simplement cette ligne dans votre préambule: \usepackage{mystyle}
  2. Si vous l'avez dans un autre dossier, vous pouvez y accéder en utilisant son chemin complet comme \usepackage{/path/to/folder/mystyle}

Cela dit, si vous n'êtes pas sûr que le fichier de style se trouve dans l'installation de tout le monde, incluez-le simplement dans le même répertoire et assurez-vous de faire git add mystyle.sty et suivez-le avec le reste de vos fichiers (bien qu'il n'y ait probablement aucun changement). Il n'est pas nécessaire d'avoir un répertoire parent. Mais si vous insistez sur un répertoire différent, voir l'option 2 ci-dessus.

Il serait préférable que ce soit dans un sous-répertoire que dans un répertoire parent, car vous pouvez toujours appeler le fichier en tant que \usepackage{subdir/mystyle} et assurez-vous d'invoquer votre fichier de style. Cependant, si vous vous échappez vers le répertoire parent, vous ne savez jamais si les autres utilisateurs ont un dossier de même nom qui ne fait pas partie de votre package, ce qui peut entraîner des erreurs.

17
abcd

Cela ne vous concerne probablement plus, mais voici une autre façon de faire ce que vous voulez. Configurez votre dépôt git comme ceci:

mystyle.sty
project/
    makefile
    project.tex

et met \usepackage{mystyle} dans le préambule de project.tex. Compilation project.tex manuellement ne fonctionnera pas, bien sûr, car mystyle.sty n'est pas dans le même répertoire que project.tex.

Cependant, si makefile contient quelque chose comme:

project.pdf: mystyle.sty project.tex
    pdflatex project

mystyle.sty: ../mystyle.sty
    cp ../$@ $@

puis en exécutant make à partir du répertoire project, mystyle.sty à copier au bon endroit avant project.tex est (cette fois avec succès) compilé.

Cette façon peut sembler un peu exagérée, mais elle combine les meilleures fonctionnalités d'autres méthodes.

  1. Si plusieurs projets dans le même référentiel nécessitent mystyle.sty ayant alors une commune mystyle.sty s'asseoir au-dessus d'eux a plus de sens que d'avoir une copie dans chaque répertoire de projet; toutes ces copies devraient être conservées.
  2. La compilation est portable, dans le sens où si vous me donniez vos copies de mystyle.sty et project.tex alors je serais (en théorie du moins) capable de compiler manuellement sans avoir à modifier les fichiers que vous m'avez donnés. Par exemple, je n'aurais pas à remplacer \usepackage{/your/path/mystyle} avec \usepackage{/my/path/mystyle}.
7
Dave Wilding

Vous pouvez utiliser les Makefiles comme suggéré ci-dessus. Une autre option est CMake. Je n'ai pas testé les répertoires parents.

Si vous avez la structure de fichiers suivante:

    ├── CMakeLists.txt
    ├── cmake
    │   └── UseLATEX.cmake
    ├── img
    │   └── logo.jpg
    ├── lib
    │   └── framed.sty
    └── main.tex
  • vous devriez avoir CMake installé, des instructions sur ressources CMake

  • UseLATEX.cmake peut être téléchargé depuis ici

  • puis à l'intérieur du CMakeLists.txt

    ╚═$ cat CMakeLists.txt
    cmake_minimum_required (VERSION 2.6)
    set(PROJECT_NAME_STR myProject)
    project(${PROJECT_NAME_STR})
    
    set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
    include(UseLATEX)
    
    ADD_LATEX_DOCUMENT(main.tex
                       IMAGE_DIRS img
                       DEFAULT_PDF
                       MANGLE_TARGET_NAMES)
    
  • Quelques exemples de contenu pour main.tex (notez l'image)

    ╚═$ cat main.tex
    \documentclass{report}
    
    \begin{document}
    
    \begin{center}
      \includegraphics[width=300px]{img/logo.jpg}
    \end{center}
    
    \end{document}
    
  • Le répertoire lib contient les fichiers * .sty

  • Vous pouvez maintenant compiler:

    cd /directory/that/has/CMakeLists.txt/
    mkdir build
    cd build
    cmake ..
    make
    
  • vous pouvez ensuite afficher main.pdf qui se trouve dans le répertoire de construction.

3
lunamystry

Lorsque vous utilisez la distribution TeX qui utilise kpathsea , vous pouvez utiliser la variable d'environnement TEXINPUTS pour spécifier où TeX recherche les fichiers. La variable doit être utilisée de la manière suivante.

Les chemins dans TEXINPUTS sont séparés par :. Un chemin vide comprendra les chemins de recherche par défaut, c'est-à-dire juste les deux points. Deux barres obliques consécutives signifient que le répertoire et tous les sous-répertoires sont recherchés.

Ainsi, par exemple, pour créer un fichier document.pdf qui utilise les fichiers du répertoire courant, tous les sous-répertoires du répertoire resources et les répertoires par défaut, vous pouvez utiliser le Makefile suivant.

document.pdf: document.tex
    TEXINPUTS=.:./resources//: pdflatex document.tex

Pour accélérer la recherche de nom de fichier, vous pouvez créer un ls-R base de données à l'aide de la commande mktexlsr.

Pour tous les détails sur kpathsea, jetez un œil au manuel .

0
H. Rittich