将任意长的单词列表排列成预定义的段落

将任意长的单词列表排列成预定义的段落

如何构造宏,每个宏接受任意数量的元组输入,并将参数输出到设计的段落形式?此外,还存在宏再次接受一些输入,然后打印未输入但与元组子结构中这些输入相关的相应输入。

我们根据颜色和文本大小对文本条目进行降序排列。

\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如果你在等待问题第二部分的答案,那么请清楚地给出答案。

相关内容