将宽度大于 \textwidth 的 pchstack 环境置于中心

将宽度大于 \textwidth 的 pchstack 环境置于中心

我有一个来自 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}

相关内容