
Ao escrever algumas macros para envolver ambientes flutuantes, me deparei com uma falha na expansão de macros (pelo menos acho que sim) quando se trata de armazenar especificadores flutuantes.
main.tex
:
\documentclass{scrartcl}
\usepackage{fontspec}
\usepackage{myfig}
\begin{document}
\section{Dummy section}
%\begin{myfig}[b!]
\begin{myfig}
Yadda yadda yadda
\end{myfig}
\end{document}
myfig.sty
:
\ProvidesPackage{myfig}
\makeatletter
\newcommand{\@std@float@align}{p!}
%\newenvironment{myfig}[1][t!]{
\newenvironment{myfig}[1][\@std@float@align]{
\begin{figure}[#1]
}{
\end{figure}
}
\makeatother
Ao compilar com xetex
, isso me dá:
./main.tex:10: LaTeX Error: Unknown float option `\'.
Tentei fazê-lo funcionar com a estratégia proposta em 3. deesta resposta, tentandoentenda tex
a expansão. A julgar pela postagem desta pergunta, falhei. Como posso armazenar meu especificador float em uma macro e usá-lo?
Responder1
Você nunca deve usar !
rotineiramente. !
significaignoraras restrições (especificadas pelo usuário) no posicionamento do float. Portanto, é melhor definir as restrições desejadas, em vez de sempre ignorá-las.
O posicionamento padrão da figura é\fps@figure
Então, para tornar o padrão, b
você só precisa
\makeatletter
\renewcommand\fps@figure{b}
\makeatother
Não há necessidade de redefinir o ambiente da figura.