总线防护问题

总线防护问题

我一直都在使用 bussproofs,但这里有一个我尚未解决的情况。我想以这样的方式排版以下内容,即右侧的“in [CATEGORY]”添加内容与 bussproofs 树的基线对齐。(当然,我不想只将文本放入“树”中,那样会违背目的。)理想情况下,文本还会右对齐。

此示例只是并排排列了两棵防总线树,但双线与无线条的差异使它们具有不同的高度。(而且,其他印刷因素可能会使情况恶化。)

有人能提供一些很酷的技巧吗?

\documentclass{article}
\usepackage{amsmath}
\usepackage{bussproofs}

\begin{document}

\begin{align*}
  \AxiomC{$\mathsf{Forget}(A) \xrightarrow{f} Y$}
  \doubleLine
  \UnaryInfC{$A \xrightarrow{g} \nabla Y$}
  \DisplayProof
  \AxiomC{$\textrm{in \textbf{Set}}$}
  \noLine
  \UnaryInfC{$\textrm{in $D$-\textbf{Set}}$}
  \DisplayProof
\end{align*}

\end{document}

答案1

在此处输入图片描述

这需要两次运行来测量位置

\documentclass{article}
    \usepackage{amsmath}
    \usepackage{bussproofs}
\makeatletter
\def\zz#1{\pdfsavepos\write\@auxout{\gdef\expandafter\string\csname ZZ#1\endcsname{\the\pdflastxpos sp}}}
\def\zzadjust#1#2{%
\expandafter\ifx\csname ZZ#1\endcsname\relax
\else
\kern\dimexpr\csname ZZ#2\endcsname-\csname ZZ#1\endcsname\relax
\fi}
\makeatother
\begin{document}

\begin{center}
  \AxiomC{$\mathsf{Forget}(A) \xrightarrow{f} Y$\rlap{\zz{a}\zzadjust{a}{z}in \textbf{Set}}}
  \doubleLine
  \UnaryInfC{$A \xrightarrow{g} \nabla Y$\rlap{\zz{b}\zzadjust{b}{z}in $D$-\textbf{Set}}}
  \DisplayProof\zz{z}
\end{center}

\end{document}

答案2

这是可行的,但需要一些低级技巧。

\documentclass{article}
\usepackage{amsmath}
\usepackage{bussproofs}

\begin{document}

\[
  \AxiomC{$\mathsf{Forget}(A) \xrightarrow{f} Y$}
  \doubleLine
  \UnaryInfC{$A \xrightarrow{g} \nabla Y$}
  \sbox{0}{\DisplayProof}
  \usebox{0}
  \vcenter to \dimexpr\ht0+\dp0{
    \hbox{$\textrm{in \textbf{Set}}\vphantom{\xrightarrow{f}}$}
    \vfill
    \hbox{$\textrm{in $D$-\textbf{Set}}$}
  }
\]

\end{document}

在此处输入图片描述

相关内容