我有一个来自 cryptocode 包的 pchstack 环境,它有点太宽,无法容纳在文本宽度内。无论如何,我都想让它居中,这样它就会侵占两个边距。一个最小的例子如下。
\documentclass{article}
\usepackage{cryptocode}
\begin{document}
\begin{center}
\begin{pchstack}[boxed]
\makebox[1.2\textwidth]{}
\end{pchstack}
\end{center}
\end{document}
现在不出所料,这实际上不起作用。这里有几个关于图表的答案,建议将内容放入 \makebox[0pt]{...} 或调整框中。但是由于我不知道的原因,pchstack 环境只能放在一个框中。在它周围制作任何框,例如
\documentclass{article}
\usepackage{cryptocode}
\begin{document}
\begin{center}
\makebox[0pt]{
\begin{pchstack}[boxed]
\makebox[1.2\textwidth]{}
\end{pchstack}
}
\end{center}
\end{document}
导致 pdflatex 抱怨
!LaTeX 错误:出现错误 — — 可能缺少 \item。
是否有其他方法可以将太宽的东西居中,或者我是否需要修复加密代码包?
答案1
(1)该boxed
选项将内容放置在一个框架框中,从而在\fboxsep
其周围留出相等的空间(第一个框)。
(2)要取消水平拉伸并使框适合文本的宽度,请使用 键space
(第二个框,space= 2\fboxsep
)。
(3)如果您的内容大于文本的宽度,您可以将 包裹\pchstack
在 中minipage
,并将其向左偏移一半的额外尺寸加上\parindent
(最后一个框)。
在这个简单的例子中,它是通过测量最长线的宽度来完成的,在一般情况下可能不是那么简单,可能需要手动校正。
\documentclass{article}
\usepackage[
n,
operators,
advantage,
sets,
adversary,
landau,
probability,
notions,
logic,
ff,
mm,
primitives,
events,
complexity,
oracles,
asymptotics,
keys]{cryptocode}
\usepackage{showframe}% only for showing the margins
\usepackage{xcolor}
\renewcommand\fbox{\fcolorbox{red}{white}} % color the frame boxes
\begin{document}
\begin{center}
\begin{pchstack}[boxed] % default
\makebox[1.0\textwidth]{default}
\end{pchstack}
\end{center}
\begin{center}
\begin{pchstack}[boxed, space=2\fboxsep]% eliminate the horizontal expansion
\makebox[1.0\textwidth]{space = 2*fboxsep}
\end{pchstack}
\end{center}
\newlength{\longline} %measure the longest line
\settowidth{\longline}{$b \sample \bin (\pk,\sk) \sample \kgen (\secparam) (\state,m_0,m_1) \sample\adv(\secparam, \pk, c) c \sample \enc(\pk,m_b) b' \sample \adv(\secparam, \pk, c, \state) $}
\hspace{\dimexpr -\parindent -\fboxsep + 0.5\linewidth -0.5\longline}
\begin{minipage}{\textwidth}
\begin{pchstack}[boxed, space=2\fboxsep]
\pseudocode[linenumbering]{
b \sample \bin (\pk,\sk) \sample \kgen (\secparam) (\state,m_0,m_1) \sample\adv(\secparam, \pk, c) c \sample \enc(\pk,m_b) b' \sample \adv(\secparam, \pk, c, \state) \\
\pcreturn b = b'
}
\end{pchstack}
\end{minipage}
\end{document}