我正在制作一本食谱,想使用单个宏 \recipe(在下面的最小示例中)插入食谱名称、食物标签(表示饮食限制的自定义符号)以及简短描述。我有一个名为“foodtags”的文件夹,里面有各种符号。当我通过命令(下面是 \foodtags)在文本中调用这些符号时,它会显示正确的符号。
但是,当使用 \recipe 命令时,符号并没有在同一行上右对齐并以与部分相同的大小显示,而是出现错误“未定义的控制序列。\foreach ... 到达 \let \pgffor@assign@before@code”。
\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}
知道这个问题的根源是什么吗?这是 Section 环境和图形交互的问题吗?我该如何解决这个问题?
答案1
这个问题背后的原因在如何在部分名称中包含图形这建议使用\protect
来避免像\includegraphics
在将其写入辅助文件时那样扩展命令。为什么?因为\section
s 最终包含在从.toc
文件中读取的 ToC 中。
在您的特定情况下,您还拥有进入部分标题的自动图形序列。这种类型的列表处理通常需要分配,这在处理部分单元时也会有问题。因此,我建议您的\recipe
宏如下:
\newcommand{\recipe}[3]{\section[#1]{#1 \hfill \foodtags{#2}} #3}
这可以避免脆弱的内容进入目录,同时仍然允许上下文适当的目录(如果需要的话)。