中心线处换行

中心线处换行

我使用的是纯 TeX。我想定义一个宏 \cpar,使

\centerline{A\cpar B}

扩大至

\centerline{A}\centerline{B}

我尝试过类似的事情

\def\cpar{\egroup\centerline\bgroup}

以及 \let 和 \expandafter 的各种变体,但无法使其工作。有什么提示吗?

答案1

您可以发出\hss\egroup,关闭 发起的框\line{\hss#1\hss},然后\line\bgroup\hss重新启动业务。

\def\cpar{\hss\egroup\line\bgroup\hss}

\centerline{A\cpar B\cpar CDEF\cpar Some more words}

\bye

在此处输入图片描述

请注意,之前的空格\cpar不会被删除。

一种不同的实现方式,使用\\和来修剪项目周围的空格。

\input expl3-generic

\ExplSyntaxOn
\cs_set_eq:NN \atdot_centerline:n \centerline
\cs_set_protected_nopar:Npn \centerline #1
 {
  \seq_set_split:Nnn \l_atdotde_centerline_seq { \\ } { #1 }
  \seq_map_inline:Nn \l_atdotde_centerline_seq
   {
    \atdot_centerline:n { ##1 }
   }
 }
\ExplSyntaxOff

\centerline{A \\ A\\ B \\ CDEF\\ Some more words}

\bye

在此处输入图片描述

答案2

我创建了一个新的宏\Centerline来执行此操作。

\input listofitems
\let\cpar\relax
\def\Centerline#1{%
  \setsepchar{\cpar}%
  \readlist\clarg{#1}%
  \foreachitem\z\in\clarg[]{\centerline{\z}}%
}
\Centerline{Plain old Centerline}

\Centerline{Test number 1\cpar Test number 2 right now}

\Centerline{First\cpar Second\cpar Third}
\bye

在此处输入图片描述

我并不建议重新定义\centerline它自己,但是那也可以做到:

\input listofitems
\let\cpar\relax
\let\svcenterline\centerline
\def\centerline#1{%
  \setsepchar{\cpar}%
  \readlist\clarg{#1}%
  \foreachitem\z\in\clarg[]{\svcenterline{\z}}%
}
\centerline{Plain old Centerline}

\centerline{Test number 1\cpar Test number 2 right now}

\centerline{First\cpar Second\cpar Third}
\bye

相关内容