有没有办法通过命令行加载包?我试过:
latex "\RequirePackage{xcolor} \input{myfile.tex}"
但它不起作用。
我需要通过我编写的脚本“临时”加载一些包,以便对我的输出文件(pdf 或 dvi)进行一些检查。
编辑。我发现我使用的字符串生成文件xcolor.pdf
而不是myfile.pdf
根据要求,这是我的.log
shell 输出:
tmp$ latex "\RequirePackage{xcolor} \input{example.tex}"
This is pdfTeX, Version 3.14159265-2.6-1.40.16 (TeX Live 2015) (preloaded format=latex)
restricted \write18 enabled.
entering extended mode
LaTeX2e <2015/10/01> patch level 2
Babel <3.9m> and hyphenation patterns for 79 languages loaded.
(/usr/local/texlive/2015/texmf-dist/tex/latex/xcolor/xcolor.sty
(/usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/color.cfg)
(/usr/local/texlive/2015/texmf-dist/tex/latex/graphics/dvips.def))
(./example.tex (/usr/local/texlive/2015/texmf-dist/tex/latex/base/article.cls
Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
(/usr/local/texlive/2015/texmf-dist/tex/latex/base/size11.clo))
(/usr/local/texlive/2015/texmf-dist/tex/latex/lipsum/lipsum.sty)
No file xcolor.aux.
[1
Non-PDF special ignored!
Non-PDF special ignored!
Non-PDF special ignored!{/usr/local/texlive/2015/texmf-var/fonts/map/pdftex/upd
map/pdftex.map}
Non-PDF special ignored!
Non-PDF special ignored!] [2
Non-PDF special ignored!
Non-PDF special ignored!
Non-PDF special ignored!
Non-PDF special ignored!] (./xcolor.aux) )</usr/local/texlive/2015/texmf-dist/f
onts/type1/public/amsfonts/cm/cmr10.pfb>
Output written on xcolor.pdf (2 pages, 22276 bytes).
Transcript written on xcolor.log.
截图如下:
答案1
驱动程序不匹配
文件myfile.tex
已损坏:
tmp$ latex
latex
初始化以生成 DVI 作为输出格式。
(/usr/local/texlive/2015/texmf-dist/tex/latex/xcolor/xcolor.sty ... (/usr/local/texlive/2015/texmf-dist/tex/latex/graphics/dvips.def))
软件包xcolor
中装有 DVI 驱动程序dvips
。很好。
但是之后:
Non-PDF special ignored! {/usr/local/texlive/2015/texmf-var/fonts/map/pdftex/upd
map/pdftex.map} ... 输出写在 xcolor.pdf 上
模式切换为 PDF 并生成 PDF 文件。DVI 的色彩特效无效。
LaTeX 文档应该绝不更改输出模式。许多软件包都依赖于稳定的输出模式。检查代码中是否有 的更改\pdfoutput
。可以读取(最好使用软件包ifpdf
),但不应更改。
在命令行上加载包
有一些包可以加载前 \documentclass
使用\RequirePackage
,参见 egreg 的回答。
其他包需要在课程结束后加载。有些包甚至可以在课程后期加载\AtBeginDocument
,那么命令行将变成:
$ pdflatex '\AtBeginDocument{\RequirePackage{xcolor}\pagecolor{yellow}}\input{myfile}'
另一种方法是在文件中提供一个钩子myfile.tex
。例如,在序言中的正确位置:
\ifx\WithPageColor Y
\usepackage{xcolor}
\pagecolor{yellow}
\fi
如果\WithPageColor
未定义,则忽略页面颜色设置。但是,可以在命令行上定义它:
$ pdflatex '\let\WithPageColor=Y\input{myfile}'
序言中钩子的另一种变体:
\documentclass{...}
...
\providecommand{\PageColorHook}{}
\PageColorHook
...
\begin{document}
\end{document}
然后在命令行上:
$ pdflatex '\newcommand{\PageColorHook}{\usepackage{xcolor}{\pagecolor{yellow}}\input{myfile}'
答案2
是的,确实如此:第一的输入文件用于名称。
如何修复?
latex -jobname=myfile '\RequirePackage{xcolor}\input{myfile.tex}'
在您的系统上,双引号可能有效,但在我的系统上却无效。
为什么会发生这种情况?当 TeX 引擎启动时
engine <options> <argument>
(就你的情况engine
而言latex
)
它会查看输入的内容。如果<argument>
不以反斜杠开头,则将其视为文件名,并且引擎本质上会执行\input <argument>
。否则,引擎会等待第一\input
条指令,输入文件的名称将确定用于日志文件和输出(dvi 或 PDF)的作业名称。
注意:该\input
命令是原始命令。
由于\RequirePackage
最终确实如此\input xcolor.sty
,我们认为作业名称是xcolor
根据规则设置为的。
该选项-jobname
通过禁用上述功能并在一开始就建立作业名称来修复此问题。
上面的命令行调用和输入文件以 开头的情况有很大区别\RequirePackage
。在后一种情况下,\RequirePackage
当文件已经存在\input
并且作业名称已确定时,会看到 。