我用 定义了两个简单的环境xparse
。当我尝试在环境todominute
中嵌套环境时,出现了问题:minutes
\documentclass[a4paper, 10pt]{article}
\usepackage{polski}
\usepackage{xltxtra}
\usepackage{xparse}
\usepackage{booktabs}
\NewDocumentEnvironment {minutes} {} {%
\begin{table*}[h!]
\begin{tabular*}{\textwidth}{@{} p{0.25\textwidth} l p{0.4\textwidth} l @{}}
\textbf{Zadanie} & \textbf{Typ} & \textbf{Opis} & \textbf{Przydział} \\
\midrule
}{%
\end{tabular*}
\end{table*}
}
\NewDocumentEnvironment {todominute} {m O{}} {%
{#1} & \textsc{TODO} &
}{%
& {#2} \\
}
\begin{document}
\begin{minutes}
\begin{todominute}{Poprawki opisu produktu}[TC]
Zgodnie z opisem z paragrafu \ref{sec:opis_produktu}.
\end{todominute}
\begin{todominute}{Poprawki mapy pamięci}[MM]
Zgodnie z opisem z paragrafu \ref{sec:mapa_pamieci}.
\end{todominute}
\end{minutes}
\end{document}
我收到的只是一些没用的讯息:
! Extra }, or forgotten \endgroup.
\@endpbox ...finalstrut \@arstrutbox \par \egroup
\hfil
l.27 ...n{todominute}{Poprawki opisu produktu}[TC]
编辑:
阅读评论后,我明白了问题所在。有没有简单的方法可以实现所需的行为?我可以声明一个可以这样使用的新命令,并打印minutes
环境中声明的表的整行吗?
\begin{minutes}
\todominute{Poprawki opisu produktu}[TC]
Zgodnie z opisem z paragrafu \ref{sec:opis_produktu}.
\todominute{Poprawki mapy pamięci}[MM]
Zgodnie z opisem z paragrafu \ref{sec:mapa_pamieci}.
\end{minutes}
答案1
如果对表行使用命令而不是环境,则问题就会消失。
\documentclass{article}
\usepackage{booktabs}
\usepackage{xparse}
\NewDocumentEnvironment {minutes} {} {%
\begin{table*}[htp!]
\begin{tabular*}{\textwidth}{@{} p{0.25\textwidth} l p{0.5\textwidth} l @{}}
\textbf{Zadanie} & \textbf{Typ} & \textbf{Opis} & \textbf{Przydział} \\
\midrule
}{%
\end{tabular*}
\end{table*}
}
\NewDocumentCommand {\todominute} {m o m} {
#1 & \textsc{TODO} & #3
& #2 \tabularnewline
}
\begin{document}
\begin{minutes}
\todominute{Poprawki opisu produktu}[TC]
{Zgodnie z opisem z paragrafu \ref{sec:opis_produktu}.}
\todominute{Poprawki mapy pamięci}[MM]
{Zgodnie z opisem z paragrafu \ref{sec:mapa_pamieci}.
\begin{enumerate}
\item asd
\item qwe
\item zxc
\end{enumerate}
}
\end{minutes}
\end{document}
答案2
我修改了一些 David 提出的解决方案。
我希望避免在细节列放在大括号中。
我的方法在参数顺序方面并不是很灵活,因为只有最后一列可以填充,而无需将其内容放入{}
-wrapped 参数中。
无论如何,这样使用感觉更自然,因为它类似于默认itemize
环境。作为额外奖励,它不会弄乱文本编辑器中的语法颜色。
\documentclass[10pt]{article}
\usepackage{booktabs}
\usepackage{xparse}
\NewDocumentEnvironment {minutes} { } {%
\begin{table}[htp]
\begin{tabular}{@{} p{0.2\textwidth} p{0.2\textwidth} p{0.5\textwidth} @{}}
\toprule
\textbf{Minute} & \textbf{Owner} & \textbf{Details} \tabularnewline
\midrule
}{%
\end{minipage} \tabularnewline
\bottomrule
\end{tabular}
\end{table}
}
\NewDocumentCommand {\minute} { s m O{} } {%
\IfBooleanTF #1 {%
}{%
\end{minipage} \tabularnewline
\midrule
}%
{#2} & {#3} &
\begin{minipage}[t]{0.5\textwidth}
}
\begin{document}
\begin{minutes}
\minute*{Subject 1}%
The first item \textbf{has to be} starred:\newline
\verb=\minute*{The first...}=
\minute{Info 2}
The rest \textbf{musn't} be starred.
\minute{Task 2}[TC]%
So it goes.
\end{minutes}
\end{document}