图片的新命令

图片的新命令

我正在写论文,我想通过一个命令添加图片。我对 LaTeX 还不太熟悉,所以我不太明白。到目前为止,我尝试过这个:

\newcommand{\pic}[4]{
\begin{figure}[h!]
\centering
\includegraphics[width=#1\textwidth]{#2}
\caption{#3}
\label{#4}
\end{figure}
}

但是我收到错误消息“段落在 gin@iii 完成之前结束”。但是当我使用不带 的命令时\newcommand,它没有任何问题。有人知道吗?

答案1

如果您定义一个带有 4 个参数的命令,并且它们都是必需的,那么您将得到如下内容:

\newcommand\mycommand[4]{% these comment signs will prevent the introduction of spurious spaces
  ... #1... #4%
}

然后要在文档中使用该命令,你需要说

\mycommand{}{}{}{}

另外,使用\graphicspath{{path/to/graphics/}}而不是添加每个图像的路径,并且不要使用文件扩展名:最好让它graphicx弄清楚。

所以你需要这样的东西:

\graphicspath{{pics/}}
...
\pic{0.8}{layering-osgi-eps-converted-to}{OSGI Schichtenmodell}{OSGILayer}

请注意,如果需要,它graphicx可能会自动转换 EPS 图像 - 您无需预先转换它们。(然后它将使用 PDF(如果可用) - 它不会每次都转换它们。)

答案2

在应用这种“简化”之前要小心:它并没有真正简化你的生活,并且使打字稿更难阅读和输入,因为你总是不确定参数的顺序。

这里我提出了一个键值接口;你只需要设置你的编辑器来准备输入,例如

\addpic{
  width=,
  image=,
  caption=,
  label=,
}

然后,您可以轻松地用数据填充它。对于特定图像,您可以添加其他键,以便指定不同的放置首选项、图形列表的简短标题或要传递给的附加\includegraphicswidth=

请注意,在此界面中按键的顺序并不重要。

\documentclass{article}
\usepackage{xparse}
\usepackage{graphicx}

\ExplSyntaxOn

% the user level command
\NewDocumentCommand{\addpic}{m}
 {
  \group_begin: % localize the changes to the variables
  \simonson_pic:n { #1 }
  \group_end:
 }

% the key-value interface
\keys_define:nn { simonson/pic }
 {
  placement .tl_set:N = \l_simonson_pic_placement_tl,
  placement .initial:n = htp,
  width .tl_set:N = \l_simonson_pic_width_tl,
  width .initial:n = 1,
  options .tl_set:N = \l_simonson_pic_options_tl,
  image .tl_set:N = \l_simonson_pic_image_tl,
  caption .tl_set:N = \l_simonson_pic_caption_tl,
  shortcaption .tl_set:N = \l_simonson_pic_shortcaption_tl,
  label .tl_set:N = \l_simonson_pic_label_tl,
 }

% the main command
\cs_new_protected:Nn \simonson_pic:n
 {
  % set the keys from the argument
  \keys_set:nn { simonson/pic } { #1 }
  % start the figure environment
  \__simonson_start_figure:V \l_simonson_pic_placement_tl
  \centering
  % include the image
  \__simonson_pic_image:VVV
    \l_simonson_pic_width_tl % the text width fraction
    \l_simonson_pic_options_tl % other options
    \l_simonson_pic_image_tl % the image name
  % the caption
  \tl_if_empty:NTF \l_simonson_pic_shortcaption_tl
   {
    \caption{\l_simonson_pic_caption_tl}
   }
   {
    \caption[\l_simonson_pic_shortcaption_tl]{\l_simonson_pic_caption_tl}
   }
   % the label
   \tl_if_empty:NF \l_simonson_pic_label_tl
    {
     \label{\l_simonson_pic_label_tl}
    }
   % end the figure environment
   \end{figure}
}

% syntactic sugar: we want some token lists to be expanded before usage
\cs_new_protected:Nn \__simonson_start_figure:n
 {
  \begin{figure}[#1]
 }
\cs_generate_variant:Nn \__simonson_start_figure:n { V }

\cs_new_protected:Nn \__simonson_pic_image:nnn
 {
  \includegraphics[width=#1\textwidth,#2]{#3}
 }
\cs_generate_variant:Nn \__simonson_pic_image:nnn { VVV }

\ExplSyntaxOff

\begin{document}

\listoffigures

\pic{
  width=0.3,
  image=example-image,
  caption={This is an example image, and a comma in the caption},
  label=one,
}

\pic{
  placement=bp,
  width=0.2,
  options={angle=90},
  image=example-image-a,
  caption=Rotated image,
  shortcaption=In the text the image is rotated!,
}

\end{document}

在此处输入图片描述

正如 Zarko 正确评论的那样,\pic如果您打算使用 TikZ,这不是一个好名字,因此我将其更改为\addpic

相关内容