1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
"""Defines latex_document(...) macro.
"""
def _latex_pdf_impl(ctx):
"""Rule to build a single PDF file.
"""
texlive_path = ctx.var.get("TEXLIVE_FULL_DIR", None)
if texlive_path == None:
fail("Please run setup_texlive.sh to set TEXLIVE_FULL_DIR.")
ctx.actions.run(
mnemonic = "LaTeX",
executable = "python",
use_default_shell_env = True,
arguments = [
ctx.files._run_script[0].path,
texlive_path,
ctx.files._latexrun[0].path,
ctx.label.name,
ctx.files.main[0].path,
ctx.outputs.out.path,
] + [src.path for src in ctx.files.srcs],
inputs = depset(
direct = (ctx.files.main + ctx.files.srcs + ctx.files._latexrun +
ctx.files._run_script),
),
outputs = [ctx.outputs.out],
)
_latex_pdf = rule(
attrs = {
"main": attr.label(allow_files = True),
"srcs": attr.label_list(allow_files = True),
"_latexrun": attr.label(
allow_files = True,
default = "@bazel_latex_latexrun//:latexrun",
),
"_run_script": attr.label(
allow_files = True,
default = "@bazel_latex//:run_latex.py",
),
},
outputs = {"out": "%{name}.pdf"},
implementation = _latex_pdf_impl,
)
def latex_document(name, main, srcs = []):
"""Given a TeX file, add rules for compiling and archiving it.
"""
# PDF generation.
_latex_pdf(
name = name,
srcs = srcs,
main = main,
)
# Convenience rule for viewing PDFs.
native.sh_binary(
name = name + "_view",
srcs = ["@bazel_latex//:view_pdf.sh"],
data = [name + ".pdf"],
)
# Copy the PDF into the main working directory.
native.sh_binary(
name = name + "_getpdf",
srcs = ["@bazel_latex//:get_pdf.sh"],
data = [name + ".pdf"],
)
# Create an arXiv-ready version of the source.
native.sh_binary(
name = name + "_arxivable",
srcs = ["@bazel_latex//:get_arxivable.sh"],
data = srcs + ["@arxiv_latex_cleaner//:all"],
)
|