在我面临的问题的最简单的形式中,我需要定义一个接受两个参数的命令,使用第一个参数将一些内容放入文档中调用命令的确切位置,并保存第二个参数以便稍后在文档中使用。
具体来说,我正在定义一个命令来帮助我填写活动报告。该命令将接受某些活动的描述(第一个参数)和证明已执行该活动的文件的名称(扫描页面或 PDF)(第二个参数)。该命令必须将第一个参数格式化为漂亮的表格,并将 添加到\ref
PDF,它将自动包含在文档末尾的部分中,并带有相应的\label
。
现在我使用标签作为第二个参数并手动包含文件,如下例所示。
\documentclass[]{article}
\newcounter{ctannex}
\DeclareRobustCommand{\annex}[1]{%
\refstepcounter{ctannex}%
\label{#1} %
Annex \arabic{ctannex} %
}
\newcounter{ctactivity}
\DeclareRobustCommand{\activity}[3]{%
\refstepcounter{ctactivity}%
\label{#1} %
Activity \arabic{ctactivity}\\ %
Description: #3\\ %
Receipt: \ref{#2}
}
\usepackage{graphicx}
\begin{document}
\section{Activities}
\begin{itemize}
\item \activity{actLabel}{annexLabel}{nothing, really}
\end{itemize}
\section{Annexes}
\begin{itemize}
\item \annex{annexLabel}
\includegraphics[width=\textwidth]{falta}
\end{itemize}
\end{document}
理想情况下,我会将命令调用为
\activity{actLabel}{file.png}{nothing, really}
答案1
以下代码提供您所需要的功能。
\documentclass{article}
\usepackage[demo]{graphicx}% http://ctan.org/pkg/graphicx
\usepackage{hyperref}% http://ctan.org/pkg/hyperref
\def\PrintAnnex{}
\newcounter{activityctr}% \renewcommand{\theactivityctr}{\arabic{activityctr}}%
\newcounter{annexctr}% \renewcommand{\theannexctr}{\arabic{annexctr}}%
\makeatletter
\newcommand{\newactivity}[3]{%
\item\refstepcounter{activityctr}% Increment and mark activity counter
\label{#1}% Label activity
Activity:~\theactivityctr\\% Print activity #
Description:~#3\\% Print description
Receipt:~\ref{annex-#1}% Reference receipt
\g@addto@macro{\PrintAnnex}{%
\item\refstepcounter{annexctr}% Increment and mark annex counter
\label{annex-#1}% Label annex
Annex:~\theannexctr\par% Print annex #
\includegraphics[width=\linewidth,height=2\baselineskip]{#2}% Insert image
}%
}
\makeatother
\begin{document}
\section{Activities}
\begin{itemize}
\newactivity{activity1}{tiger}{nothing, really}
\newactivity{activity2}{tiger}{Rooooaaarrr!}
\newactivity{activity3}{tiger}{Rooooaaarrr!}
\newactivity{activity4}{tiger}{Mooaaarrr Rooooaaarrr!}
\end{itemize}
\section{Annexes}
\begin{itemize}
\PrintAnnex
\end{itemize}
\end{document}
我假设您可能有兴趣引用文档其他部分的活动,因此使用两个计数器(一个用于活动activityctr
,一个用于附件annexctr
)。
随着每一个
\newactivity{<label>}{<file>}{<description>}
\item
创建了一个带有\label{<label>}
和 说明 的<description>
。<file>
将 添加为并以 的形式\includegraphics
附加(使用\g@addto@macro
)到宏中。因此,您可以使用 编译活动,并在列表中发出以打印附件列表。\PrintAnnex
\item
\newactivity
\PrintAnnex
我已经添加了hyperref
包裹为了证明超引用是可行的,尽管你可能对其他东西感兴趣。此外,demo
包选项graphicx
仅仅出于可移植性的原因,允许任何人编译 MWE。