Erro ao inserir símbolos personalizados (gráficos) na seção

Erro ao inserir símbolos personalizados (gráficos) na seção

Estou fazendo um livro de receitas e quero usar uma única macro \recipe (no exemplo mínimo abaixo) para inserir o nome da receita, as tags da comida (símbolos personalizados que indicam restrições alimentares) e também uma breve descrição. Eu tenho uma pasta chamada "foodtags" onde estão vários símbolos. Quando eu chamo esses símbolos no texto através de um comando (abaixo, \foodtags), ele exibe os símbolos corretos.

No entanto, ao usar o comando \recipe, em vez de fazer com que os símbolos apareçam alinhados à direita na mesma linha e no mesmo tamanho da seção, recebo o erro "sequência de controle indefinida. \foreach ... alcance \let \pgffor@assign @antes@código".

\documentclass[12pt]{memoir}
\usepackage{tikz}
\usepackage{pgffor}
\usepackage{xstring}
\noexpandarg

%Kosher, Vegetarian, Vegan symbols
\newcommand*\foodtag[1]{\includegraphics[width=1em]{foodtags/#1}}
\newcommand*\foodtags[1]{\foreach \x in {#1} {\foodtag{\x}}}

%Recipe
\newcommand{\recipe}[3]{\section{#1 \hfill \foodtags{#2}} #3}

\begin{document}

\recipe{Turkish Style Charoset}{vegan,kosher}{A delicious smooth charoset made with apples, dates, chopped almonds, and wine}

\end{document}

Alguma ideia de qual é a raiz deste problema? É um problema com a interação do ambiente da Seção e dos gráficos? Como faço para resolver isso?

Responder1

A razão por trás do problema é discutida emComo incluir gráficos dentro do nome da seçãoque sugere o uso \protectpara evitar a expansão de comandos como \includegraphicsquando são gravados nos arquivos auxiliares. Por que? Porque \sections são eventualmente incluídos no ToC, que é lido no .tocarquivo.

No seu caso particular, você também tem uma sequência automatizada de gráficos no título da seção. Este tipo de processamento de lista geralmente requer atribuições, o que também é problemático quando se trata de unidades seccionais. Como tal, sugiro o seguinte para sua \recipemacro:

\newcommand{\recipe}[3]{\section[#1]{#1 \hfill \foodtags{#2}} #3}

Isso evita que conteúdo frágil entre no ToC, ao mesmo tempo que permite um ToC contextualmente apropriado (se isso for necessário).

informação relacionada