相当于 LaTeX3 的 \@afterheading

相当于 LaTeX3 的 \@afterheading

我想用 LaTeX3 定义一个环境,在其中我可以抑制第一行的缩进。对于 LaTeX2e,您可以使用\@afterindentfalse\@afterheading

示例使用了这种组合。但我想避免这种组合。

\documentclass{scrartcl}
\usepackage{lipsum}
\usepackage{expl3,xparse}
\makeatletter
\def\tempaaaa{\@afterindentfalse\@afterheading}
\makeatother
\ExplSyntaxOn
\box_new:N \l_fullwidth_store_contents_one_box

\DeclareDocumentEnvironment { fullwidth } { }
  {
   \par\noindent Starting~savebox
   \vbox_set_inline_begin:N \l_fullwidth_store_contents_one_box
   \tempaaaa
  }
  {
   \vbox_set_inline_end:
   \par The~Output:\par
    \fbox{ \box_use_clear:N \l_fullwidth_store_contents_one_box }
  }
\ExplSyntaxOff
\begin{document}
\begin{fullwidth}

FOO bar

\lipsum[1]
\end{fullwidth}
\end{document}

在此处输入图片描述

答案1

正如 Bruno 所说,处理样稿问题并不像处理低级代码那样复杂。还有一个问题是,使用 LaTeX2e 改变样稿操作的实现方式并不是一个“完全安全”的操作:你根本无法确定更改不会影响现有代码。因此,使用 LaTeX3-in-LaTeX2e 需要混合使用 LaTeX3 和 LaTeX2e 代码。(例如,了解如何siunitx使用 LaTeX2e 的 NFSS 检测字体。)

xgalley软件包几乎可以流畅运行,但可能仍需要进行一些更改。对于当前的实现(我很乐意收到反馈),您需要类似

\documentclass{article}
\usepackage{lipsum,expl3,xparse,xgalley}
\ExplSyntaxOn
\box_new:N \l_fullwidth_store_contents_one_box

\DeclareDocumentEnvironment { fullwidth } { }
  {

   \par\noindent Starting~savebox
   \vbox_set_inline_begin:N \l_fullwidth_store_contents_one_box
   \bool_gset_true:N \g_galley_omit_next_indent_bool
  }
  {
   \vbox_set_inline_end:
   \par The~Output:\par
    \fbox{ \box_use:N \l_fullwidth_store_contents_one_box }
  }
\ExplSyntaxOff
\begin{document}
\begin{fullwidth}

FOO bar

\lipsum[1]

\end{fullwidth}
\end{document}

理想情况下,\noindent定义为

\bool_gset_true:N \g_galley_omit_next_indent_bool

何时xgalley加载。但是,人们依赖于\noindent原始离开垂直模式的事实,因此这种变化会破坏很多 LaTeX2e 代码。一旦我们有了分段模块,也许我可以改变这一点,但目前还不行。

相关内容