具有自动制表位的制表环境

具有自动制表位的制表环境

我正在尝试定义一个自定义制表环境,该环境允许我将后续文本行与先前生成的块中的元素对齐,不能在制表环境中。到目前为止,这是我得到的:

\documentclass{article}

\usepackage[savepos]{zref}

\newenvironment{nstabbing}
  {\setlength{\topsep}{0pt}%
   \setlength{\partopsep}{0pt}%
   \tabbing}
  {\endtabbing\setcounter{tabstop}{0}}

\newcounter{tabstop}
\newcommand{\align}{%
    \stepcounter{tabstop}%
    \expandafter\zsavepos{stop\thetabstop}%
}

\begin{document}
First{\align} I have{\align} something{\align} which sets{\align} the alignment {\align}points.
\begin{nstabbing}
\hspace*{-\oddsidemargin}\hspace{-1in}\hspace{\zposx{stop1} sp}\=%
\hspace{-\zposx{stop1} sp}\hspace{\zposx{stop2} sp}\=%
\hspace{-\zposx{stop2} sp}\hspace{\zposx{stop3} sp}\=%
\hspace{-\zposx{stop3} sp}\hspace{\zposx{stop4} sp}\=%
\hspace{-\zposx{stop4} sp}\hspace{\zposx{stop5} sp}\=%
\kill
\>Some\>thing\>using\>those\>alignment points.\\
\end{nstabbing}

\end{document}

笔记:为了实现此 MWE,我用简单的文本替换了生成对齐点的块,以尽量减少 MWE 所需的包数量。将此块移动到制表环境中不是在实际使用中是可能的。

这可行,但手动构建终止行过于复杂,尤其是当制表位数量增加时(在某些用例中我可能最多有 20 个左右)。我想要做的是将其自动化,以便它可以成为自定义环境定义的一部分。

我认为,根据计数器的当前值,我知道需要定义多少个制表位以及环境启动时它们的名称是什么。然后我需要做的是以某种方式循环遍历位置来定义每个位置。有人对我如何修改定义以使其自动执行此操作tabstop有什么建议吗?nstabbing

答案1

这是 的不同定义\align(我建议使用不同的名称,因为\align被 所采用amsmath),此外还有一个宏,如果您愿意\setstops,可以将其添加到 的定义中。nstabbing

\documentclass{article}

\usepackage[savepos]{zref}

\newenvironment{nstabbing}
  {\setlength{\topsep}{0pt}%
   \setlength{\partopsep}{0pt}%
   \tabbing}
  {\endtabbing\setcounter{tabstop}{0}}

\newcounter{tabstop}
\makeatletter
\newcommand{\AL}{%
  \@bsphack
  \stepcounter{tabstop}%
  \expandafter\zsavepos{stop\thetabstop}%
  \@esphack
}

\newcommand{\setstops}{%
  \gdef\nstabbing@stops{%
    \hspace*{-\oddsidemargin}\hspace{-1in}%
    \hspace{\zposx{stop1} sp}\=%
  }%
  \count@=\@ne
  \loop\ifnum\count@<\value{tabstop}%
    \begingroup\edef\x{\endgroup
      \noexpand\g@addto@macro\noexpand\nstabbing@stops{%
        \noexpand\hspace{-\noexpand\zposx{stop\the\count@} sp}%
        \noexpand\hspace{\noexpand\zposx{stop\the\numexpr\count@+1} sp}\noexpand\=%
      }%
    }\x
    \advance\count@\@ne
  \repeat
  \nstabbing@stops\kill
}
\makeatother

\begin{document}
First \AL I have \AL something \AL which sets \AL the alignment  \AL points.
\begin{nstabbing}\setstops
\>Some\>thing\>using\>those\>alignment points.\\
\end{nstabbing}

\end{document}

在此处输入图片描述

相关内容