Fazendo uma macro/atalho longo em Latex

Fazendo uma macro/atalho longo em Latex

Queria saber se era possível fazer uma macro grande, para inserir figuras? Eu queria que contivesse:

\begin{figure} [H]

\centering

\includegraphics[scale=0.8]{#FILENAME}

\caption{#FIGURECAPTION \label{#LABELREF}}

\end{figure}

Vendo que era tão longo, quis facilitar a inserção de um "código" tão longo. Devo fazer isso como um ambiente no preâmbulo? Ou como um novo comando?

Ficaria grato por qualquer tipo de ajuda que pudesse obter!

Responder1

Você tentou:

\newcommand\Figure[3]{%
  \begin{figure} [H]
    \centering
    \includegraphics[scale=0.8]{#1}
    \caption{#2}\label{#3}
  \end{figure}
}

Você usaria isso como

\Figure{filename}{caption}{label}

Na verdade, melhor ainda seria:

\newcommand\Figure[4][scale=0.8]{%
  \begin{figure} [H]
    \centering
    \includegraphics[#1]{#2}
    \caption{#3}\label{#4}
  \end{figure}
}

A segunda variante define um argumento opcional, cujo padrão é scale=0.8, para passar argumentos para \includegraphics. Por exemplo, você pode escrever coisas como \Figure[width=3cm]{filename}{caption}{label}.

Editar: legenda curta opcional

Sigur pediu nos comentários uma legenda curta opcional. Na verdade, isso é um pouco mais complicado, no sentido de que o seguinte não funciona:

\newcommand\Figure[4][]{%
  \begin{figure} [H]
    \centering
    \includegraphics[scale=0.8]{#2}
    \caption[#1]{#3}\label{#4}
  \end{figure}
}

porque sem argumento opcional #1fica em branco e a macro insere \caption[]{...long caption...}, então a legenda curta fica vazia! Para contornar isso, você poderia, em vez disso, tornar o valor padrão #1igual a \relax, por exemplo, e então na macro usar

\ifx#1\relax\relax\caption{#3}\else\caption[#1]{#3}\fi

Agora a macro se comporta conforme o esperado.

Uma solução melhor, no entanto, é usar \NewDocumentCommanda partir doxparsepacote porque isso permitirá que você tenha dois argumentos opcionais. Aqui está uma maneira de fazer isso:

\documentclass{article}
\usepackage{mwe}
\usepackage{xparse}
\usepackage{float}
\NewDocumentCommand\Figure{o D<>{scale=0.8} m m m}{%
  % [optional short caption]<optional includegraphics options>{image}{caption}{label}
  \begin{figure}[H]
    \centering
    \includegraphics[#2]{#3}
    \IfNoValueTF{#1}{\caption{#4}}{\caption[#1]{#4}}
    \label{#5}
  \end{figure}
}
\begin{document}

  \Figure{example-image-a}{Normal figure}{f:normal}

  \Figure<width=20mm>{example-image-a}{Width 20mm }{f:20mm}

  \Figure[Short caption]<width=20mm>{example-image-a}{With 20mm with short caption}{f:20mm}

  \Figure[Short caption]{example-image-a}{Short caption}{f:20mm}

\end{document}

Um argumento opcional intermediário [...]se tornará a legenda curta e um argumento opcional intermediário <...>será fornecido para \includegraphics, sendo o padrão scale=0.8.

informação relacionada