我正在尝试使用 tikz 包的foreach
在表格环境中使用 tikz 包的命令。我知道它不太适合这样做,但我如何才能让以下命令工作(我认为,很明显它的作用是什么应该textbf
确实如此,而且我知道该命令也存在一些困难):
\newcommand{\myTable}[1]{
\begin{tabular}{p{0.35\textwidth}|p{0.65\textwidth}}
\hline
Headline 1 & Headline 2 \\
\foreach \lhs/\rhs in {#1} {
\textbf{\lhs} & \rhs \\
}
\hline
\end{tabular}
}
梅威瑟:
\documentclass{article}
\usepackage{tikz}
\newcommand{\myTable}[1]{
\begin{tabular}{p{0.35\textwidth}|p{0.65\textwidth}}
\hline
Headline 1 & Headline 2 \\
\foreach \lhs/\rhs in {#1} {
\textbf{\lhs} & \rhs \\
}
\hline
\end{tabular}
}
\begin{document}
\myTable{{Title 1}/{Description 1}, {Title 2}/{Description 2}}
\end{document}
答案1
下面的代码有点痛苦,使用\foreach
使用蒂克兹:
\documentclass{article}
\usepackage{etoolbox}
\usepackage{tikz}
\makeatletter
\newcommand{\myTable}[1]{%
\def\tabledata{}% reset \tabledata
\foreach \lhs/\rhs in {#1} {% build table data from #1
\protected@xappto\tabledata{\textbf{\lhs} & \rhs \\}
}%
\begin{tabular}{p{0.35\textwidth}|p{0.65\textwidth}}
\hline
Headline 1 & Headline 2 \\ \hline
\tabledata \hline
\end{tabular}
}
\makeatother
\begin{document}
\myTable{{Title 1}/{Description 1}, {Title 2}/{Description 2}}
\end{document}
诀窍在于您需要先构建表数据,然后将其放入环境中tabular
。扩展\\
也会导致问题。
更直接的方法是使用\docsvlist
使用电子工具箱:
\documentclass{article}
\usepackage{etoolbox}
\def\addtablerow#1/#2!{\textbf{#1} & #2\\}
\newcommand{\myTable}[1]{
\renewcommand*\do[1]{\addtablerow##1!}
\begin{tabular}{p{0.35\textwidth}|p{0.65\textwidth}}
\hline
Headline 1 & Headline 2 \\ \hline
\docsvlist{#1} \hline
\end{tabular}
}
\begin{document}
\myTable{Title 1/Description 1, Title 2/Description 2}
\end{document}
该\docsvlist
命令将 (当前版本) 应用于\do
逗号分隔列表中的每个元素。反过来,\do
调用\addtablerow
,它需要两个参数,它们由/
和分隔!
。
在这两种情况下,你最终都会得到:
顺便说一句,在这两种情况下,您都可以删除许多括号 - 如第二个示例所示。