我想通过git与许多其他人分享一份乳胶文件。 因此,我们决定将所有在everyones latex-installation中不存在的特殊样式文件放入资源目录中。如果这个目录是一个超级目标,那将是很酷的。实际的工作目录 我究竟如何导入这些样式文件?
重要的是,即使这些远程样式的依赖关系也可以通过其他远程样式解决。
答案 0 :(得分:17)
您可以通过两种方式将样式文件(mystyle.sty
)导入到文档中:
.tex
文件位于同一文件夹中,只需在序言中加入此行:\usepackage{mystyle}
\usepackage{/path/to/folder/mystyle}
也就是说,如果您不确定风格文件是否在每个人的安装中,只需将其包含在同一目录中,并确保执行git add mystyle.sty
并跟踪它其余的文件(尽管很可能不会对其进行任何更改)。不需要父目录。但如果您坚持使用其他目录,请参阅上面的选项2.
如果它位于子目录而不是父目录中会更好,因为您仍然可以将文件称为\usepackage{subdir/mystyle}
并确保您正在调用样式文件。但是,如果您转义到父目录,您永远不会知道其他用户是否具有类似命名的文件夹,该文件夹不属于您的程序包,这可能会导致错误。
答案 1 :(得分:7)
这可能与你无关,但这是另一种做你想做的事情。 像这样设置你的git存储库:
mystyle.sty
project/
makefile
project.tex
并将\usepackage{mystyle}
放在project.tex
的序言中。
当然,手动编译project.tex
将不起作用,因为mystyle.sty
与project.tex
不在同一目录中。
但是,如果makefile
包含以下内容:
project.pdf: mystyle.sty project.tex
pdflatex project
mystyle.sty: ../mystyle.sty
cp ../$@ $@
然后从make
目录中运行project
将导致mystyle.sty
被复制到project.tex
(此次成功)编译之前的正确位置。
这种方式可能看起来有点过分,但它确实结合了其他方法的最佳功能。
mystyle.sty
,那么在它们上面放置一个共同的mystyle.sty
比在每个项目目录中都有一个副本更有意义;所有这些副本都必须保留。mystyle.sty
和project.tex
的副本,那么我(理论上至少)可以手动编译而无需修改文件你给我。
例如,我不必将\usepackage{/your/path/mystyle}
替换为\usepackage{/my/path/mystyle}
。答案 2 :(得分:3)
您可以按照上面的建议使用Makefile。另一种选择是CMake。我没有测试父目录。
如果您有以下文件结构:
├── CMakeLists.txt
├── cmake
│ └── UseLATEX.cmake
├── img
│ └── logo.jpg
├── lib
│ └── framed.sty
└── main.tex
您应该安装CMake,有关CMake resources
可以从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
然后您可以查看构建目录中的main.pdf。
答案 3 :(得分:0)
使用使用kpathsea的TeX发行版时,可以使用TEXINPUTS
环境变量来指定TeX在哪里寻找文件。该变量需要按以下方式使用。
TEXINPUTS
中的路径由:
分隔。空路径将包括默认搜索路径,即仅冒号。连续两个斜杠表示搜索目录和所有子目录。
因此,例如,要构建使用当前目录中的文件,document.pdf
目录的所有子目录以及默认目录的文件resources
,可以使用以下Makefile。
document.pdf: document.tex
TEXINPUTS=.:./resources//: pdflatex document.tex
要加快文件名查找的速度,可以使用ls-R
命令建立一个mktexlsr
数据库。
有关kpathsea的所有详细信息,请查看manual。
答案 4 :(得分:0)
latexmk中的第48页 here的Utility subroutines
下记录了一项功能,该功能可以在运行期间更新TEXINPUTS
。如果您考虑使用.latexmkrc文件配置链和选项,则可以将ensure_path()
添加到文件中:
以下是示例:
# .latexmkrc
ensure_path('TEXINPUTS', './path/to/something//', '/full/path/to/something/else//')
# [...] Other options goes here.
$pdf_update_method = 3;
$xelatex = 'xelatex -synctex=1 -interaction=nonstopmode -file-line-error %O %S';
$pdf_previewer = 'start "%ProgramFiles%/SumatraPDF/SumatraPDF.exe" %O %S';
$out_dir = 'build/';
在路径末尾注意//
,这将有助于LaTeX在指定目录和所有子目录中搜索文件。
请注意,尽管这是一个了不起的功能,但您需要仔细注意命名方案。如果在多个位置使用相同的文件名,则在使用
\include{somefile}
进行导入时会遇到麻烦。