这里有两个小问题:
- 为什么是子条目3不在
\scriptsize
? - 如何安排... 主条目1所以它只会出现在最后一个子条目(无论有多少对),而不是在第一对的末尾(即在子条目2)?
平均能量损失
% !TEX TS-program = lualatexmk
\documentclass{scrreprt}
%%%%%%%%%%%%%%%%%%%%%%
%
%
%
\newenvironment {mainentry} {\mainentryA}{}
\def\mainentryA#1#2#3{%
\def\subentry##1##2{%
\scriptsize ##1 \space \Huge ##2 ... #1
}%
#1 #2 #3
}
%
%
%
\def\subentry{\def\subentryS{\def\subentryS{\endgraf}}\futurelet\next\subentryA}
\def\subentryA{\ifx\bgroup\next\expandafter\subentryB\fi}
\def\subentryB#1#2{\subentryS\subentry{#1}{#2}\futurelet\next\subentryA}
%
%
%
%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\begin{mainentry}{
Mainentry1
}{
Mainentry2
}{
Mainentry3
}
\subentry{
Subentry1
}{
Subentry2
}{
Subentry3
}{
Subentry4
}
\end{mainentry}
\end{document}
答案1
你对另一个答案的评论暗示你需要,或许,将一些在 LaTeX 环境开始时声明的数据添加到每个\subentry
使用末尾。这意味着
\begin{mainentry}{AAA}{B}{}
\Subentry{C}{D}{E}{F}
\Subentry{U}{V}{W}{X}{Y}{Z}
\end{mainentry}
将会打印如下内容:
AAA B
(sub C, sub D) (sub E, sub F) (end: AAA)
(sub U, sub V) (sub W, sub X) (sub Y, sub Z) (end: AAA)
但我不确定这是否正是您的意图,因为您在此站点上提出了许多有关此主题的问题,但没有一个问题能够准确解释您的意图。
您可以尝试用此代码进行实验:
\documentclass[a4paper]{scrreprt}
\newenvironment {mainentry} {\mainentryA}{}
\def\mainentryA#1#2#3{%
\def\SubentryE{\endgraf At the end of subentry collection is again (#1).}%
\def\SubentryC##1##2{%
Here is external paremater (#1) and second external (#2).
And internal parameter is (##1) and second internal (##2).
}
}
\def\Subentry{\def\SubentryS{\def\SubentryS{\endgraf}}\futurelet\next\SubentryA}
\def\SubentryA{\ifx\bgroup\next\expandafter\SubentryB\else\SubentryE\fi}
\def\SubentryB#1#2{\SubentryS\SubentryC{#1}{#2}\futurelet\next\SubentryA}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\begin{mainentry}{A}{B}{}
\Subentry{C}{D}{E}{F}
NEXT
\Subentry{U}{V}{W}{X}{Y}{Z}
\end{mainentry}
Some text.
\end{document}
答案2
\subentry{ Subentry1 }{ Subentry2 }{ Subentry3 }{ Subentry4 }
是
\scriptsize Subentry1 \space \Huge Subentry2 ... mainentry1 (Subentry3}{Subentry4}
所以只有第一个在\scriptsize
,所有后面的都在Huge中,标题询问迭代,但这里没有迭代,\subentry
只调用一次。
您可以在环境的开始代码中保存 mainentry1,并在结束时使用它
\def\savedmain{#1}
在开始代码中,并\savedmain
在子条目后的结束代码中使用。或者(如前面的问题所示)您可以使用expl3
允许您#1
直接在结束代码中使用的环境声明。
我认为您正在寻找类似的东西,但我永远不会在文档中使用这样的定义。对列表进行迭代{]
完全违反了 Latex 语法,其中{}
表示强制参数,而在这里您实际使用对,它只会掩盖文档。
我会使用简单的非迭代定义和类似语法
\begin{mainentry}{aa}{bb}{cc}
\subentry{s1}{sss1}
\subentry{s2}{sss2}
\subentry{s3}{sss3}
\end{mainentry}
那么代码和文档就会清晰很多。
然而:
\documentclass{scrreprt}
%%%%%%%%%%%%%%%%%%%%%%
%
%
%
\newenvironment{mainentry}[3]{#1 #2 #3\def\mainentrya{#1}\par}{\mainentrya}
%
\long\def\subentry#1#2{%
\ifx\par#1%
\endgraf\expandafter\end\else
{\scriptsize#1} {\huge#2}\expandafter\subentry
\fi}
%
%
%
%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\begin{mainentry}{
Mainentry1
}{
Mainentry2
}{
Mainentry3
}
\subentry{
Subentry1
}{
Subentry2
}{
Subentry3
}{
Subentry4
}
\end{mainentry}
\end{document}