Imprimir mensagem em macro expansível

Imprimir mensagem em macro expansível

É possível imprimir uma mensagem como \message{…}em uma macro expansível para fins de depuração? Tentei criar funções expansíveis com \message{}, mas não consigo conectá-las ao siunit \num{…}que espera uma string expandida.

\documentclass[]{article}

\usepackage{siunitx}

\begin{document}

\NewExpandableDocumentCommand{\foo}{}{
  \message{Foo}%
  42%
}

\num{\foo}

\end{document}

Responder1

Em luatex você pode imprimir de Lua, por exemplo

\documentclass[]{article}

\usepackage{siunitx}

\begin{document}

\NewExpandableDocumentCommand{\foo}{}{%
  \directlua{print('Foo')}%
  42%
}

\num{\foo}

\end{document}

Ou use as texiofunções do módulo se quiser gravar no log e também no terminal.

Caso contrário, você pode usar (por exemplo) devorar e ativar o rastreamento):


\usepackage{siunitx}
\def\MESSAGE#1{}
\begin{document}

\NewExpandableDocumentCommand{\foo}{}{%
  \MESSAGE{Foo}%
  42%
}

\tracingmacros=1
\tracingonline=1
\num{\foo}
\tracingnone

\end{document}

correr com

pdflatex file | grep -A2 'MESSAGE #1'

produz saída terminal

\MESSAGE #1->
#1<-Foo

informação relacionada