我想排版一些涉及伴随的范畴论计算(有时称为双向规则)。
简而言之,它们看起来大约像这样(MWE):
\documentclass[a4paper]{article}
\usepackage{amsmath}
\begin{document}
\begin{align*}
C &\longrightarrow FD\\
\line(1,0){75}&\line(1,0){75}\\
GC &\longrightarrow D\\
\line(1,0){75}&\line(1,0){75}\\
1 &\longrightarrow D^{GC}
\end{align*}
\end{document}
当然,这看起来很可怕,但它应该能传达出大致的想法。
我想要一个环境(叫做adjunctions
),它允许我输入上述内容,例如:
\begin{adjunctions}
C & FD \\
GC & D \\
1 & D^{GC}
\end{adjunctions}
我需要几样东西:
- 一个设置线条宽度的选项(在整个环境中是通用的),也许可以使它们不对称(即左边比右边长);
- 适当的间距;在上面的例子中,它
GC \to D
和上方线条之间的间距就是我想要的,包括顶部和底部边距; - 可选地,控制符号的放置位置
\longrightarrow
(在整个环境中通用就可以了)。
我在网上搜索过,但什么也没找到(甚至连一张排版正确的图片都没有)。对于创建自定义align
环境的一般参考也非常感谢。
答案1
这能满足您的需要吗?
\documentclass{article}
\usepackage{array,xparse}
\usepackage{multicol} % just for the example
\setlength{\columnseprule}{.4pt} % just for the example
\ExplSyntaxOn
\NewDocumentEnvironment{adjunctions}{O{}}
{
\cs_set_eq:cN {@arraycr} \farin_arraycr:
\keys_set:nn { farin/adjunction } { #1 }
\begin{array}
{
@{ \hspace { \dim_eval:n { \l_farin_left_shift_dim + \l_farin_padding_dim } } }
r
@{ {\farin_strut:} \l_farin_symbol_tl {} }
l
@{ \hspace { \dim_eval:n { \l_farin_right_shift_dim + \l_farin_padding_dim } } }
}
}
{
\end{array}
}
\keys_define:nn { farin/adjunction }
{
leftshift .dim_set:N = \l_farin_left_shift_dim,
leftshift .initial:n = 0pt,
rightshift .dim_set:N = \l_farin_right_shift_dim,
rightshift .initial:n = 0pt,
padding .dim_set:N = \l_farin_padding_dim,
padding .initial:n = 6pt,
symbol .tl_set:N = \l_farin_symbol_tl,
symbol .initial:n = \longrightarrow,
verticalspacing .dim_set:N = \l_farin_vertspac_dim,
verticalspacing .initial:n = {3pt},
}
\cs_new_protected:Npn \farin_strut:
{
\vrule height \dim_eval:n { \ht\strutbox + 1.2\l_farin_vertspac_dim }
depth \dim_eval:n { \dp\strutbox + \l_farin_vertspac_dim }
width 0pt
}
\makeatletter
\exp_args:NNo \cs_new:Npn \farin_arraycr:
{
\@arraycr\hline
}
\makeatother
\ExplSyntaxOff
\begin{document}
\begin{multicols}{2}
\noindent
\verb|\begin{adjunctions}|
\[
\begin{adjunctions}
C & FD \\
GC & D \\
1 & D^{GC}
\end{adjunctions}
\]
\verb|\begin{adjunctions}|\\
\verb| [symbol=\longleftarrow]|
\[
\begin{adjunctions}[symbol=\longleftarrow]
C & FD \\
GC & D \\
1 & D^{GC}
\end{adjunctions}
\]
\verb|\begin{adjunctions}|\\
\verb| [leftshift=12pt]|
\[
\begin{adjunctions}[leftshift=12pt]
C & FD \\
GC & D \\
1 & D^{GC}
\end{adjunctions}
\]
\verb|\begin{adjunctions}|\\
\verb| [rightshift=12pt,|\\
\verb| symbol=\otimes]|
\[
\begin{adjunctions}[rightshift=12pt,symbol=\otimes]
C & FD \\
GC & D \\
1 & D^{GC}
\end{adjunctions}
\]
\verb|\begin{adjunctions}|\\
\verb| [verticalspacing=2ex]|
\[
\begin{adjunctions}[verticalspacing=2ex]
C & FD \\
GC & D \\
1 & D^{GC}
\end{adjunctions}
\]
\end{multicols}
\end{document}
答案2
普通的 TeX 解决方案也应该可以在 LaTeX 中使用。
\def\adjunctions
{\bgroup
\def\\%
{\crcr
\noalign{\vskip 0.2\baselineskip \hrule \vskip 0.2\baselineskip}}%
\halign \bgroup
\hss \mathsurround0pt $\displaystyle ## \longrightarrow {}$%
&
\mathsurround0pt $\displaystyle ##$ \cr}
\def\endadjunctions{\crcr\egroup}
\adjunctions
C & FD \\
GC & D \\
1 & D^{GC}
\endadjunctions
\bye