在密码学中,许多安全定义(IND-CPA、IND-CCA 等)都表示为对手和挑战者之间的博弈。是否有现有的包或简单的方法来实现这种效果?
答案1
这应该可以帮你搞定大部分事情。这是一堆杂乱无章的东西。如需进一步了解,请随时询问。(注意:我保留了\lextlinearrow
和的原始定义\rextlinearrow
,但重新定义了它们。原始定义使用的是覆盖文本,\tiny
而不是正常的字体大小。)
\documentclass{article}
\parskip 1ex
\usepackage{amssymb}
\usepackage{verbatimbox}
\usepackage{multirow}
\usepackage{scalerel}
\newcommand{\extline}{$\scriptsize$-$\normalsize$\!}
\newcommand{\lextlineend}{$\scriptsize$\lhd\!$\normalsize$}
\newcommand{\rextlineend}{$\scriptsize\rule{.1ex}{0ex}$\rhd$\normalsize$}
\newcounter{index}
\newcommand\extlines[1]{%
\setcounter{index}{0}%
\whiledo {\value{index}< #1}
{\addtocounter{index}{1}\extline}
}
\newcommand\rextlinearrow[2]{$
\setbox0\hbox{$\extlines{#2}\rextlineend$}%
\tiny$%
\!\!\!\!\begin{array}{c}%
\mathrm{#1}\\%
\usebox0%
\end{array}%
$\normalsize$\!\!%
}
\newcommand\lextlinearrow[2]{$
\setbox0\hbox{$\lextlineend\extlines{#2}$}%
\tiny%
$%
\!\!\!\!\begin{array}{c}%
\mathrm{#1}\\%
\usebox0%
\end{array}%
$\normalsize$\!\!%
}
\renewcommand\lextlinearrow[2]{%
\setbox0\hbox{$\lextlineend\extlines{#2}$}%
\shortstack{$\mathrm{#1}$\\\addvbuffer[-.7ex -.3ex]{\usebox0}}%
}
\renewcommand\rextlinearrow[2]{%
\setbox0\hbox{$\extlines{#2}\rextlineend$}%
\shortstack{$\mathrm{#1}$\\\addvbuffer[-.7ex -.3ex]{\usebox0}}%
}
\begin{document}
\noindent
\begin{tabular}{clc}
{\large Challenger} & & {\large Adversary}\\
picks random k and &&\\
picks random b$\in$\{0,1\}&&\\
\multirow{2}{*}{\addvbuffer[1.1ex]{Repeat n times}\scaleto{\{}{7ex}}&
\lextlinearrow{P_i}{26} &\\
& \rextlinearrow{\mathbf{E}_k[P_i]}{26} &\\
& \lextlinearrow{M_0, M_1}{26} & picks M$_0$, M$_1$ of equal length \\
& \rextlinearrow{C = \mathbf{E}_k[M_b]}{26} &\\
& \lextlinearrow{b' \in \{0,1\}}{26} &\\
& Attacker wins game if b = b'&
\end{tabular}
\end{document}
看没有 \xrightrightarrow[a]{b}?和如何将文字放在波浪箭头上?讨论我是如何想到使用文本而不是可扩展符号的。然而,我实际上更喜欢我目前使用\shortstack
更好的方法,即使它是从基线开始构建的,而不是垂直居中结果。