我有一个相当复杂的宏,用于在横向模式下生成 pdf 图形。
- 当我将宏包含在主文件主体中时,代码运行正常。
- 当我将宏放在单独的样式文件中时,LaTeX 无法确定图形的大小。
- 当我把宏放在单独的样式文件中时和在宏前面加上
\includegraphics
命令,代码就可以正常运行。
查看日志,区别在于,在情况 1 和 3) 中,我有
Package graphics Info: Driver file: dvips.def on input line 91.
进而
Package ifpdf Info: pdfTeX in pdf mode detected
对于第二种情况,我有
Package graphics Info: Driver file: pdftex.def on input line 91
进而
Package ifpdf Info: pdfTeX in pdf mode not detected
所以问题是,我如何才能在情况 2 中引发我在情况 1 和 3 中得到的行为。
我确信这个问题可以在没有我的代码细节的情况下得到回答,但是为了以防万一,我还是把它包括进去了。这是案例 3 的主要乳胶代码。可以通过注释掉倒数第三行来创建案例 2。可以通过用下面的实际代码\includegraphics
替换该行来创建案例 1\usepackage{landscapePdfPic}
\documentclass{amsart}%
\usepackage{calc}
\usepackage{pdflscape}
\usepackage{graphicx}
\usepackage{xparse}
\usepackage{ifmtarg}
\usepackage{environ}
\usepackage{landscapePdfPic}
\def\figureDir{.}
\begin{document}
\includegraphics{pic.pdf}
\landscapePdfPic{\figureDir}{pic}
\end{document}
以下是 的内容landscapePdfPic.sty
:
\providecommand{\LAYOUT}[5]{%
\setlength{\hoffset}{0pt}
\setlength{\voffset}{0pt}
\setlength{\topmargin}{#1 - 1in - \voffset - \headheight - \headsep}
\setlength{\oddsidemargin}{#2 - 1in - \hoffset}
\setlength{\evensidemargin}{\oddsidemargin}
\setlength{\textheight}{#3}
\setlength{\textwidth}{#4}
\setlength{\marginparwidth}{#5}
}
\providecommand{\ARTPAGE}{\LAYOUT{1.5 in}{1.75 in}{8 in}{5 in}{1.5 in}}
\providecommand{\FULLPAGE}{\LAYOUT{1 in}{1 in}{9 in}{6.5 in}{0.75 in}}
\def\topVerticalOffset{-120pt}%Negative value moves the top of the pic up the page
\def\topHorizontalOffset{-160pt}%Negative value moves the top of the left
\def\widthMultiplier{2.4}%How much to blow up the picture horizontally, relative to \textwidth
\def\heightMultiplier{1.6}%How much to blow up the picture vertically, relative to \textheight
\makeatletter
\DeclareDocumentCommand{\landscapePdfPic}{%
O{\topVerticalOffset}
O{\topHorizontalOffset}
O{\widthMultiplier}
O{\heightMultiplier}
m m o o }{
\newpage
\IfNoValueTF{#7}
{\def\hideCaptionOffset{3in}}
{
\@ifmtarg{#7}
{\def\hideCaptionOffset{3in}}
{\def\hideCaptionOffset{-0.58in}}}
\ARTPAGE
\begin{landscape}
\begin{figure}
\centering
$\empty$\\[#1]
$\empty$\hspace*{#2}
\includegraphics[width=#3\textwidth,height=#4\textheight] {#5/#6.pdf}
\vspace*{\hideCaptionOffset}
\caption{#7}
\vspace*{-\hideCaptionOffset}
\IfNoValueTF{#8}
{\label{fig:#6}}
{\@ifmtarg{#8}
{\label{fig:#6}}
{\label{fig:#8}}}
\vspace*{-30pt}
\thepage
\end{figure}
\end{landscape}
\FULLPAGE
}
\makeatother
答案1
据我所知,唯一的区别是,该驱动程序latex
用于案例 2 和pdflatex
其他案例。因此,案例 2 已将驱动程序加载为默认驱动程序,无法包含 PDF 文件。graphics
dvips.def
输出格式不应该被包改变。如果用户运行pdflatex
并获取DVI
,反之亦然,这会让用户感到困惑。
但是,如果文件使用错误的模式编译,则可以添加警告。包的附加内容:
\RequirePackage{ifpdf}
\ifpdf
\else
\PackageWarning{landscapePdfPic}{Wrong mode, PDF expected}%
% or \PackageError{landscapePdfPic}{Wrong mode, PDF expected}\@ehc
%
% As error recovery, dummy definitions for the macros, provided by
% the package could be given.
%
% \expandafter\endinput % possibility to end a package early at this place
\fi