
Mientras escribía algunas macros para entornos flotantes, me topé con una falla en la expansión de macros (al menos eso creo) cuando se trata de almacenar especificadores flotantes.
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
Al compilar con xetex
, esto me da:
./main.tex:10: LaTeX Error: Unknown float option `\'.
Intenté hacerlo funcionar con la estrategia propuesta en 3. deesta respuesta, tratando deentender tex
la expansión. A juzgar por haber publicado esta pregunta, fallé. ¿Cómo puedo almacenar mi especificador flotante en una macro y usarlo?
Respuesta1
Nunca debes usarlo !
de forma rutinaria. !
medioignorarlas restricciones (especificadas por el usuario) sobre la ubicación del flotador. Por lo tanto, es mejor establecer las restricciones que desee en lugar de ignorarlas siempre.
La ubicación predeterminada de la figura es\fps@figure
Entonces, para que el valor predeterminado sea b
solo necesitas
\makeatletter
\renewcommand\fps@figure{b}
\makeatother
No es necesario redefinir el entorno de la figura.