指定\includegraphics 语句中的参数

指定\includegraphics 语句中的参数

\includegraphics如果文件按照\includegraphics以下代码中的语句指定,则该语句可以正常工作。但是,如果通过宏指定\myPicspath,如注释掉的版本中所示,则会出现编译错误: xparse抱怨}文本中插入了多余的内容。然而,语句 - \myPicspath Andromeda.jpg- 生成完全相同的字符串 - 请注意,添加了前导和尾随*以确保没有出现多余的空格。

查看graphicx文档并没有提供任何线索说明为什么这是命令的问题\includegraphics,而且由于xparse错误消息中特别提到,我将其标记为 expl3 问题。

顺便说一句,命令中也会发生非常类似的事情\addbibresource;除非像例如 - 那样进行硬编码\addbibresource{d:/TeX/_Bibliographies/MyLibrary},否则文档将无法编译。

背景:定义宏参数的能力\includegraphics\addbibresource通过\NewDocumentCommand宏定义参数的能力将极大地有助于创建允许在单个位置指定文件夹信息并因此轻松重新定位的文档。

\documentclass[10pt,a4paper]{article}
%-----------------------------
%RN 20 August 2015
%ISSUE: 
%COMMENTS: 
% The .jpg file is placed in .../pictures, a subfolder under the 
% folder containing this .tex file. 
%-----------------------------
\usepackage{graphicx}
\usepackage{xparse}

\NewDocumentCommand\myPicspath{O{pictures/}}{#1}

\begin{document}
*\myPicspath Andromeda.jpg*\\
%\includegraphics[angle=270,width=12cm]{\myPicspath Andromeda.jpg}
\includegraphics[angle=270,width=12cm]{pictures/Andromeda.jpg}
\end{document} 

答案1

\myPicspath不是路径,因为宏不可扩展。一个简单的宏定义就可以了:

\documentclass[10pt,a4paper]{article}
\usepackage{graphicx}

\newcommand*{\myPicspath}{pictures/}

\begin{document}
  \includegraphics[angle=270,width=12cm]{\myPicspath Andromeda.jpg}
  \includegraphics[angle=270,width=12cm]{pictures/Andromeda.jpg}
\end{document}

文件名必须可扩展。\edef可以用来测试这一点:

\edef\test{\myPicspath}
\show\test

\test在交互模式下,TeX 停止并在控制台上显示的定义(->和最后一个点之间的部分):

> \test=macro:
->pictures/.

答案2

您可能想要添加一个键\includegraphics

\documentclass[10pt,a4paper]{article}

\usepackage{graphicx,etoolbox}
\makeatletter
\define@key{Gin}{path}{\def\Gin@path{#1}}
\def\Gin@path@default{}
\def\includegraphicsdefaultpath#1{\def\Gin@path@default{#1}}
\patchcmd\Gin@ii
  {\toks@{\Ginclude@graphics{#2}}\setkeys}
  {\toks@{\Ginclude@graphics{\Gin@path #2}}\setkeys{Gin}{path=\Gin@path@default}\setkeys}
  {}{}
\makeatother

\begin{document}
\includegraphics[angle=270,width=3cm]{duck}
\includegraphics[width=4cm,path=../]{duck}
\includegraphics[angle=90,width=3cm]{duck}

\includegraphicsdefaultpath{../}

\includegraphics[angle=270,width=3cm]{duck}
\includegraphics[width=4cm,path={}]{duck}
\includegraphics[angle=90,width=3cm]{duck}

\end{document}

duck.jpg在工作目录和其上级目录中都有一个;日志文件将显示

<use duck.jpg>
<use ../duck.jpg>
<use duck.jpg>
<use ../duck.jpg>
<use duck.jpg>
<use ../duck.jpg>

这正是我们想要的。该命令\includegraphicsdefaultpath(本地)设置要添加到文件名的默认路径(启动时为空)。

我没有测试与的交互\graphicspath

相关内容