2011-05-13 122 views
25

我想通过git与许多其他人共享乳胶文档。 因此,我们决定将所有特殊的sty文件放入资源目录中,这些文件并不存在于每个人的latex-installation中。如果这个目录是超级目录,这将是很酷的。的实际工作目录 如何导入这些样式文件?从主* .tex文件的超/子目录中包含* .sty文件

即使这些远程样式的依赖关系也可以用其他远程样式解决,这一点很重要。

回答

15

您可以导入样式文件(mystyle.sty)插入到文档中有两种方式:

  1. 如果您有它在你的路径,或在同一文件夹中.tex文件,只需在你序言这条线:\usepackage{mystyle}
  2. 如果您在不同的文件夹拥有它,你可以访问使用它的完整路径为\usepackage{/path/to/folder/mystyle}

这就是说,如果你不知道,如果样式文件是在每个人的installati只需将其包含在同一个目录中,并确保您执行了git add mystyle.sty并跟踪其中的其他文件(尽管很可能不会有任何更改)。不需要父目录。但是如果你坚持不同的目录,请参阅上面的选项2。

如果它位于子目录中而不是父目录中,则仍然可以更好,因为您仍然可以将该文件调用为\usepackage{subdir/mystyle},并确定您正在调用您的样式文件。但是,如果您逃离到父目录,则永远不知道其他用户是否具有不属于您包的一部分的类似命名的文件夹,这可能会导致错误。

+0

这是否应该与'\ documentclass'一起使用?我似乎无法加载位于我的主要.tex文件的子文件夹中的类文件。 – 2016-06-12 19:37:30

+0

由[由David Carlisle指出](http://tex.stackexchange.com/a/124013/6903),'\ usepackage {/ path/to/folder/mystyle}'工作的事实是由于缺乏错误检查。 '\ usepackage {}'的参数应该是一个名称而不是一个路径,所以2.并不是一个好的选择。 – mforbes 2016-07-26 20:43:21

7

这可能与您无关,但这里有另一种方法可以做您想做的事。 设置您的Git仓库这样的:

mystyle.sty 
project/ 
    makefile 
    project.tex 

并在project.tex序言把\usepackage{mystyle}。 手动编译project.tex当然不起作用,因为mystyle.styproject.tex不在同一个目录中。

但是,如果makefile包含沿着线的东西:

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

mystyle.sty: ../mystyle.sty 
    cp ../[email protected] [email protected] 

然后从project目录中运行make会导致mystyle.sty被复制到正确的位置project.tex之前(这一次成功)编译。

这种方式可能看起来有点超过顶端,但它确实结合了其他方法的最佳功能。

  1. 如果在同一仓库的几个项目需要mystyle.sty然后有一个共同的mystyle.sty坐在上面所有这些使得不必在每个项目目录拷贝更有意义;所有这些副本都必须保留。
  2. 编译是可移植的,从这个意义上说,如果你给我你的mystyle.styproject.tex的副本,那么我将(至少在理论上)能够手动编译而不需要修改你给我的文件。例如,我不需要用\usepackage{/my/path/mystyle}代替\usepackage{/your/path/mystyle}
+0

我会使用符号链接而不是直接复制文件。 – 2017-03-06 02:02:29

3

您可以按照上面的建议使用Makefiles。另一种选择是CMake。我没有测试父目录。

如果您有以下文件结构:

├── CMakeLists.txt 
    ├── cmake 
    │   └── UseLATEX.cmake 
    ├── img 
    │   └── logo.jpg 
    ├── lib 
    │   └── framed.sty 
    └── main.tex 
  • 你应该安装CMake的,说明书上CMake resources

  • UseLATEX.cmake可以从here

  • 然后下载在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) 
    
  • 一些示例内容main.tex(注意图)

    ╚═$ cat main.tex 
    \documentclass{report} 
    
    \begin{document} 
    
    \begin{center} 
        \includegraphics[width=300px]{img/logo.jpg} 
    \end{center} 
    
    \end{document} 
    
  • lib目录有* .sty文件

  • 您现在可以编译:

    cd /directory/that/has/CMakeLists.txt/ 
    mkdir build 
    cd build 
    cmake .. 
    make 
    
  • 然后,您可以查看build.pub文件中的main.pdf文件。

相关问题