![如何在 Latex 中编写一个简单的 if-elseif 协议?](https://linux22.com/image/394800/%E5%A6%82%E4%BD%95%E5%9C%A8%20Latex%20%E4%B8%AD%E7%BC%96%E5%86%99%E4%B8%80%E4%B8%AA%E7%AE%80%E5%8D%95%E7%9A%84%20if-elseif%20%E5%8D%8F%E8%AE%AE%EF%BC%9F.png)
我尝试过使用算法、算法的等,但似乎找不到我需要的东西。我想要类似这样的东西:
这是我使用 tcolorbox 和 align 得到的最接近的结果:
\begin{tcolorbox}[colframe=white,
colback=white,
coltitle=black,
fonttitle=\normalfont,
adjusted title= \underline{\textbf{Protocol $\hat{Q_1}$}} (for undecided process $i$ at time $m$):]
\begin{align*}
&\textbf{if} \quad K_i good(\exists 0) &\textbf{then} \quad decide_i(0) \\
&\textbf{elseif} \quad m=t+1 \cup same_i(m,m-1) &\textbf{then} \quad decide_i(1)
\end{align*}
\end{tcolorbox}
我想删除标题和代码之间的多余空间,并使所有内容像上面的示例一样对齐。
答案1
不确定这有多么普遍。
\documentclass{article}
\usepackage{amsmath}
\usepackage{array}
\newcommand{\fun}[1]{\mathsf{#1}}
\begin{document}
\noindent
\begin{tabular}{@{\hspace{3em}}>{\bfseries}ll>{\bfseries}ll@{}}
\multicolumn{4}{@{}l@{}}{%
\underline{\textbf{Protocol $\hat{Q_1}$}} (for undecided process $i$ at time $m$):%
} \\[2ex]
if & $K_i \fun{good}(\exists 0)$ & then & $\fun{decide}_i(0)$ \\
elseif & $m=t+1 \cup \fun{same}_i(m,m-1)$ & then & $\fun{decide}_i(1)$ \\
\end{tabular}
\end{document}
答案2
如果您想保留tcolorbox
您可以使用的tabularx
环境align
:
\documentclass{article}
\usepackage{tabularx}
\usepackage{tcolorbox}
\usepackage{amsmath}
\begin{document}
\begin{tcolorbox}[colframe=white,
colback=white,
coltitle=black,
fonttitle=\normalfont,
adjusted title= \underline{\textbf{Protocol $\hat{Q_1}$}} (for undecided process $i$ at time $m$):]
\begin{tabularx}{\linewidth}{lXll}
\textbf{if} & $K_i good(\exists 0)$ &\textbf{then} & $\text{decide}_i(0)$ \\
\textbf{elseif} & $m=t+1 \cup \text{same}_i(m,m-1)$ &\textbf{then} & $\text{decide}_i(1)$
\end{tabularx}
\end{tcolorbox}
\end{document}
或者,您可能想看看为伪代码设计的包,例如algorithm2e
,,,...algorithmicx
algorithm
algpseudocode