我正在写论文,我想通过一个命令添加图片。我对 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=,
}
然后,您可以轻松地用数据填充它。对于特定图像,您可以添加其他键,以便指定不同的放置首选项、图形列表的简短标题或要传递给的附加\includegraphics
键width=
。
请注意,在此界面中按键的顺序并不重要。
\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
。