我能否为几种情况建立一个结构,以便我能够得到一个 TeX 命令分支,行为如下:
如果情况A
- 如果情况 A1
\cmdAi{arg1}
- 否则,如果情况 A2
\cmdAii{arg2}
- 否则,如果情况 A3
\cmdAiii{arg3}
- 万一
否则,如果情况 B
- 否则,如果情况 B1
\cmdBi{arg4}
- 否则,如果情况 B2
\cmdBii{arg5}
- 万一
万一
情况 A1~情况 B2 是预先给出的,比如,来自有序集合(可能其形式是{\
a,\'a,\^a,`A,\^A}`)。
我知道这个ifthen
包,但是它太简单(或者太复杂?)不方便使用。
直观的解释:
这一需求与模态逻辑和语义有关。考虑给定的字母链n位(n 小于 16),例如,
TxFxyxxTyxTFyT
zTyxTzzxxTyxF
等等。表示“True”或常量的字符T
值为 1,F
表示“False”或常量的字符值为 0,其他字符x
、y
、z
等表示值介于 0 和 1 之间的变量(不必相等)。在为变量赋值后,我想打印如下结果:
上面给出的链中有贵重物品 [#1] (@1) 次(或打印 [#1] 出现在哪些地方),[#2] (@2) 次,[#3] (@3) 次,... 它们的权重总和是...
[#1], [#2], [#3] 等分别为x
, y
, z
; (@1), (@2), (@3), 等意思同前。
答案1
我不太清楚你想要什么,但既然你提到了有序列表,这里有一种方法。使用“TeX”作为计算机语言的困难之一是它缺乏内置数据结构。但是一旦你有了列表,你就可以构建你想要的任何类型的数据结构,我认为这就是你所需要的。然而,一些常见的编程范式的转变是必要的,所以这里有一个传统的 TeX 解决方案。
考虑以下列表中的关键字列表:
\def\alist{A--,A+,A++,A-,A=,A==,}
其有序列表如下:A+,A++,A--,A---,A=,A==,
列表中的每个元素都将充当一个“对象”并保存一些信息,true
或者false
您可能希望的任何其他信息。
我们定义一个合适的宏来将元素及其定义添加到列表中,然后对列表进行排序。
\def\AddElementToList#1#2#3{%
\lst@lAddTo#1{#2,}
\expandafter\def\csname#2\endcsname{#3}
\lst@BubbleSort{\alist}
}
@for
我们可以使用LaTeX 内核的命令循环列表并扩展所有元素的含义。
\@for \i:=\alist \do{%
\texttt{%
\expandafter\csname\i\endcsname}\par
}
任何单个元素都可以通过其名称访问\@nameuse{A==}
。
从命令中可以看出,您可以object
在列表中存储任何类型的。它可以是一个数字,也可以存储一本书的整章,甚至可能是整本书!下面显示的 MWE 有一个警告,如果您用土耳其语编写,请将更改\i
为其他内容或在组中运行代码。
\documentclass{article}
\usepackage{lstdoc}
\begin{document}
\makeatletter
%% define a list for demo purposes
\def\alist{A--,A+,A++,A-,A=,A==,}
%% typeset the unsorted list
\texttt\alist
The ordered list
%% the sorted list
\lst@BubbleSort{\alist}
\texttt\alist
%% empty the list
\let\alist\empty
%% add element and define the element macro
\def\AddElementToList#1#2#3{%
\lst@lAddTo#1{#2,}
\expandafter\def\csname#2\endcsname{#3}
\lst@BubbleSort{\alist}
}
%Consider adding some elements
\AddElementToList{\alist}{A+}{True}
\AddElementToList{\alist}{A++}{False}
\AddElementToList{\alist}{A-}{False}
\AddElementToList{\alist}{A=}{0}
\AddElementToList{\alist}{A==}{1}
\AddElementToList{\alist}{A--}{1}
\AddElementToList{\alist}{A---}{$a^2+33=f_2$}
\texttt\alist
%% loop over the list
\@for \i:=\alist \do{%
\texttt{%
\expandafter\csname\i\endcsname}\par
}
\makeatother
\end{document}
你可以认为这alist
是你的case
陈述。