驱动程序不匹配

驱动程序不匹配

有没有办法通过命令行加载包?我试过:

latex "\RequirePackage{xcolor} \input{myfile.tex}"

但它不起作用。

我需要通过我编写的脚本“临时”加载一些包,以便对我的输出文件(pdf 或 dvi)进行一些检查。

编辑。我​​发现我使用的字符串生成文件xcolor.pdf而不是myfile.pdf

根据要求,这是我的.logshell 输出:

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并且作业名称已确定时,会看到 。

相关内容