图表包中的方框

图表包中的方框

我正在尝试使用 Paul Taylor 的图表包绘制类似的东西

在此处输入图片描述

我试过例如

\documentclass{article}

\usepackage{diagrams}

\begin{document}
\begin{diagram}
\mathrm{input} & \rTo & {\fbox{{\fbox{f}} \rTo {\fbox{g}}} & \rTo & \mathrm{output} \\
\end{diagram}

\end{document}

但得到

! Commutative Diagram: "*&" inserted between horizontal maps.
\cd@error ...pandafter \errmessage {\cd@name : #1}
                                                  
l.839 ...\rTo & {\fbox{{\fbox{f}} \rTo {\fbox{g}}}
                                                   & \rTo & \mathrm{output} \\

使用图表可以实现这一点吗?

编辑:

下面的答案回答了我的问题非常感谢。

不过我有一个问题 - 我正在使用预处理器来生成 TeX,并且它正在解释 |whatever| 所以我得到了

在此处输入图片描述

有没有办法不使用 |...|?我使用的预处理器称为 lhs2tex,我在其文档中没有看到有关如何使用其他东西的任何信息。

答案1

我推荐 TikZ-CD(或普通 TikZ),并添加一些自定义样式和键,让生活变得更轻松。

代码

\documentclass{article}
\usepackage{tikz-cd}
\usetikzlibrary{bending} % for flex
\tikzcdset{
  boxes/.style={
    column sep=+1.3em,
    arrows={->,>={Triangle[angle'=45]}},
    every matrix/.append style={draw, inner sep=+.5em},
    cells={nodes={draw, minimum width=1cm, font=\mathstrut}}},
  io/.style args={#1:#2}{
    /tikz/column #1/.append style={nodes=input},
    /tikz/column #2/.append style={nodes=output}},
  diagrams={baseline=-axis_height},% https://tex.stackexchange.com/a/678935/16595
  @inputoutput/.style n args={5}{
    start anchor={#1},#2, to path={--+(#5:1.5em)\tikztonodes},
    execute at begin to=\tikzset{edge node={node[commutative diagrams/every cell,
      at end, anchor={#3}]{#4}}}},
  input/.style ={@inputoutput={west}{<-}{east}{input} {left}},
  output/.style={@inputoutput={east}{->}{west}{output}{right}}}
\tikzset{
  arrows={[quick]}, % bending only when we need it
  circ/.style={shape=circle, minimum size=+0pt},
  c/.style={shape=coordinate},
  @inputoutput/.style n args={4}{
    /utils/exec=\ar[{#1,#4}], append after command=(\tikzlastnode.#2)+(#3:.12cm)},
  input/.style={@inputoutput={input}{west}{left}{#1}},
  output/.style={@inputoutput={output}{east}{right}{#1}},
  shift down/.style={
    yshift=-\pgfkeysvalueof{/tikz/commutative diagrams/shift left/.@def}}}
\begin{document}
\begin{tikzcd}[boxes, io=1:1]
  |[circ]| f
\end{tikzcd}
\begin{tikzcd}[boxes, io=1:2]
   f \rar &  g
\end{tikzcd}
\bigskip

\begin{tikzcd}[boxes, row sep=2pt, io=1:2]
                                                      & f \\
  |[c]| \urar[end anchor=west] \drar[end anchor=west] &   \\
                                                      & g
\end{tikzcd}
\begin{tikzcd}[boxes, row sep=1em]
  |[input=shift right, output=shift left]| f \\
  |[c]| \uar[-, out=  0, in= -5, end anchor={[shift down]east}, out looseness=2.2]
        \uar[   out=180, in=185, end anchor={[shift down]west}, out looseness=2.2,
             /tikz/arrows={[flex]}]
\end{tikzcd}
\end{document}

输出

在此处输入图片描述

相关内容