创建/new命令以创建带换行符的表格

创建/new命令以创建带换行符的表格

我是这个论坛的新手,也是 LaTeX 的新手,所以提前感谢你的帮助。我正在尝试制作一个包含不同饮料配方的文档,其中每种饮料的成分不超过四种。我做了一个命令,每次我想要一个新配方时,都会制作一个表格来保存每种饮料的配方。当我尝试一次列出两个配方时,问题就出现了。我要么必须通过添加空行来考虑可选参数,要么在 TeX 文档中手动添加三个换行符。

以下是我目前所掌握的信息:

    \documentclass{article}
    \usepackage{array}
    \usepackage{multirow}
    \newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
    \newcommand{\recipe}[9]{\begin{tabular}{C{1cm} p{5cm}}
\multicolumn{2}{l}{\textit{#1}} \\ \hline #2 & #3 \\ #4 & #5 \\ #6 & #7 \\ #8 & #9 \\ \end{tabular} \newline}

当我使用时会产生一个单一的配方

    \recipe{White Russian}{3}{vodka}{2}{coffee liqueur}{3}{milk}

但是,当我在下一行输入另一个食谱(例如,只有两种原料)时,就会出现错误。

再次感谢!

答案1

如果您希望宏具有可变数量的参数,那么标准方法是将参数处理为分隔列表。由于您的成分是成对出现的,因此您还需要一种方法来区分数量和成分。在这里,我使用列表etoolbox处理宏\forcsvlist来处理列表,并创建了一个简单的分隔宏来区分数量和成分。使用分隔宏可以使输入语法更简单一些。

\recipe宏现在接受 2 个参数:名称和成分列表。每种成分都用 表示\IN <amount>|<substance>

我确信还有其他方法可以做同样的事情,并且很可能有人也会发布 LaTeX3 解决方案。

\documentclass{article}
\parindent=0pt
\usepackage{array}
\usepackage{etoolbox}
\newcommand{\addrow}[1]{#1\\}
\def\IN#1|#2{#1 & #2}
\newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\newcommand{\recipe}[2]{\begin{tabular}{C{1cm} p{5cm}}
\multicolumn{2}{l}{\textit{#1}} \\ \forcsvlist\addrow{#2} \end{tabular} \par}
\begin{document}
\recipe{White Russian}{\IN 3|vodka,\IN 2|coffee liqueur,\IN 3|milk}

\recipe{Martini}{\IN 3|gin,\IN |vermouth}
\end{document}

代码输出

相关内容