如何构造宏,每个宏接受任意数量的元组输入,并将参数输出到设计的段落形式?此外,还存在宏再次接受一些输入,然后打印未输入但与元组子结构中这些输入相关的相应输入。
我们根据颜色和文本大小对文本条目进行降序排列。
\documentclass[12pt]{article}
\usepackage[top=1in,bottom=1in,left=1in,right=1in]{geometry}
\usepackage[usenames,dvipsnames]{color}
\usepackage{amsfonts,graphicx,amsmath}
\def\useful{\normalsize\color{black}}
\def\mixedquality{\footnotesize\color{Green}}
\def\useless{\footnotesize\color{blue}}
\def\nonsense{\footnotesize\color{Gray}}
我们还枚举文本条目元组。我们在条目旁边的左侧空白处显示每个条目的编号。这与空白处齐平并缩进悬挂,以便在有其他条目时轻松与其他条目区分开来。
\setlength{\parindent}{27pt}\newcounter{pnkt}\newlength{\dlh}
\newcommand*\pnkt{%
\stepcounter{pnkt}%
\settowidth{\dlh}{\textbf{\textit{\arabic{pnkt}}}}%
\hspace*{\dimexpr-\dlh-18mm}\hangindent=9mm\noindent%
\textbf{\textit{\arabic{pnkt}}}\hspace{7mm}}
例如,我们可以写……
\pnkt {\useless%
\textbf{AAA1}, \textbf{BBB1}; \textbf{AAA2}, \textbf{BBB2}; \textbf{AAA3}, \textbf{BBB3}. %
\textbf{CCC}. \textit{DDD}. EEE.}
\pnkt {\mixedquality%
\textbf{AAA1}, \textbf{BBB1}; \textbf{AAA2}, \textbf{BBB2}. %
\textbf{CCC}. DDD. \textit{EEE} FFF.}
但我们更喜欢这样写……
\book{useless}{3}{AAA1}{BBB1}{AAA2}{BBB2}{AAA3}{BBB3}{CCC}{DDD}{EEE}
\essy{mixedquality}{2}{AAA1}{BBB1}{AAA2}{BBB2}{CCC}{DDD}{EEE}{FFF}
等等:对于任意数量的 AAA 和 BBB 参数。这很困难,因为\def
和\newcommand
定义的参数不超过九个。
任何针对此类问题的解决方案都可以适用于任何重复的情况,例如编写一系列实验或数学陈述,其中变量数量本身是可变的,但段落基本不变。例如,“如果 AAA1 则 BBB1,如果 AAA2 则 BBB2,...如果 AAAn 则 BBB2,如果我们假设 CCC,那么我们推断 DDD,与 EEE 相同...''这与引用问题同构。
我们枚举了所有段落。因此,在文本的后面我们想要写入,例如,This suggestion was proved years later \ranked{3}{AAA1}{AAA2}{AAA3}
显示This suggestion was proved years later [the \pnkt number of the reference corresponding to \book{rank}{3}{AAA1 ... BBB3}{CCC}{DDD}{EEE}]
。
然后,我们要写例如
... \extracted{3}{AAA1}{AAA2}{AAA3}
显示... (AAA1, AAA2, AAA3 CCC)
或... (AAA1, AAA2, AAA3, useful)
或... (AAA1, AAA2, AAA3, DDD)
,这完全取决于我们如何定义\rank
。
编辑 1:该问题的赏金。编辑 2:重写问题以方便打印。
答案1
也许这就是你需要的。但我不确定...
\documentclass[12pt]{article}
\usepackage{color}
\def\useful{\normalsize\color{black}}
\def\mixedquality{\footnotesize\color{green}}
\def\useless{\footnotesize\color{blue}}
\def\nonsense{\footnotesize\color{red}}
\def\monograf#1#2#3{\setdata{#1}\textbf{#1}. \textit{#2}. #3.\egroup\par}
\def\mirpages#1#2#3#4{\setdata{#1}\textbf{#1}. #2. \textit{#3} #4.\egroup\par}
\def\sxdef#1{\expandafter\xdef\csname#1\endcsname}
\long\def\addto#1#2{\expandafter\def\expandafter#1\expandafter{#1#2}}
\newcount\tmpnmbr
\newcount\pnktnum
\def\book{\let\finalparams=\monograf \bookoressy}
\def\essy{\let\finalparams=\mirpages \bookoressy}
\def\bookoressy#1#2{\par\pnkt\bgroup\def\tmp{}%
\csname#1\endcsname \tmpnmbr=0 \def\authornumber{#2}\authornamedB
}
\def\authornamedB#1#2{\textbf{#1}, \textbf{#2}%
\addto\tmp{#1, }%
\advance\tmpnmbr by1
\ifnum\tmpnmbr<\authornumber;
\expandafter\authornamedB\else. \expandafter\finalparams\fi
}
\def\pnkt{\advance\pnktnum by1
\noindent \hangindent=9mm \llap{\textbf{\textit{\the\pnktnum}}\kern18mm}\ignorespaces
}
\def\setdata#1{\sxdef{num:\tmp}{\the\pnktnum}\sxdef{data:\tmp}{#1}}
\def\ranked#1{\bgroup\tmpnmbr=0 \def\finalprint{[\csname num:\tmp\endcsname]}%
\def\authornumber{#1}\def\tmp{}\rankedorextracted
}
\def\extracted#1{\bgroup\tmpnmbr=0 \def\finalprint{(\tmp\csname data:\tmp\endcsname)}%
\def\authornumber{#1}\def\tmp{}\rankedorextracted
}
\def\rankedorextracted#1{\addto\tmp{#1, }%
\advance\tmpnmbr by1
\ifnum\tmpnmbr<\authornumber\relax
\expandafter \rankedorextracted \else \finalprint\egroup \fi
}
\begin{document}
\book{useless}{3}{AAA1}{BBB1}{AAA2}{BBB2}{AAA3}{BBB3}{CCC}{DDD}{EEE}
\essy{mixedquality}{2}{AAAx1}{BBBx1}{AAAx2}{BBBx2}{CCCx}{DDDx}{EEEx}{FFFx}
\book{usefull}{1}{AAAy1}{BBBy1}{CCCy}{DDDy}{EEEy}
This suggestion was proved years later \ranked{2}{AAAx1}{AAAx2}.
... \extracted{1}{AAAy1}
... \extracted{3}{AAA1}{AAA2}{AAA3}
\end{document}
对我来说有两个障碍:第一个:LaTeX(我没有使用 LaTeX),第二个:我不太了解你的规范。但我希望前面的代码有用。你可以启发我。
答案2
问题是这个问题没有给出清楚地。我会尽力复述这个问题(但我不确定我是否理解得很好)。
该\rnk
宏有两个固定参数,后面跟着 2n+4 个参数。第一个固定参数给出“前言”(由特殊名称给出的字体和颜色设置),第二个固定参数包含数字 n。接下来的 2n 个参数必须创建为 `\textbf{parameter}, \textfb{parameter}; 等。最后一对参数以点而不是分号结束。然后必须以给定的方式打印最后 4 个参数。
如果这是真的,那么下面的代码就可以实现\rnk
:
\documentclass[12pt]{article}
\usepackage{color}
% preambles:
\def\ALLUSEFULx {\normalsize\color{black}}
\def\PARTUSEFULx {\normalsize\color{green}}
\def\NOTUSEFULx {\footnotesize\color{blue}}
\newcount\tmpnum
\def\rnk #1#2{\broup \csname #1x\endcsname \tmpnum=0 \def\rnknum{#2}\rnkA}
\def\rnkA #1#2{\textbf{#1}, \textbf{#2}%
\advance\tmpnum by1
\ifnum\tmpnum<\rnknum; \expandafter\rnkA \else. \expandafter\rnkB \fi
}
\def\rnkB #1#2#3#4{\textbf{#1}. #2. \textit{#3} #4.\egroup}
\begin{document} % if you really are using LaTeX...
\rnk{NOTUSEFUL}{3}{AAA1}{BBB1}{AAA2}{BBB2}{AAA3}{BBB3}{CCC}{DDD}{EEE}{FFF}
\rnk{PARTUSEFUL}{1}{AAA1}{BBB1}{CCC}{DDD}{EEE}{FFF}
\end{document}
注意: 的输出\rnk
以字体和颜色设置开始,但未包含在组中。这可能是一个小错误,但这完全符合提问者的任务。
问题的第二部分我完全无法理解。“数字给出的参考”是什么意思,方括号中的字母 n 或 p 是什么意思等等。\rankd
如果你在等待问题第二部分的答案,那么请清楚地给出答案。