既然 LaTeX 有了钩子,那么推荐使用 \everypar 的方法是什么?

既然 LaTeX 有了钩子,那么推荐使用 \everypar 的方法是什么?

既然 LaTeX 有钩子,那么建议使用 everypar 的钩子接口吗?在 l3 程序中应该如何做到这一点?

\documentclass{article}
\ExplSyntaxOn
\newcounter{eplinenumber}
\setcounter{eplinenumber}{0}
\def\epindent{3cm}
\def\inscriptionprefix{Line:\hskip3pt}
\cs_set:Npn \mymod #1 #2 {\int_mod:nn{#1}{#2}}
\def\step_mod{5}

\NewDocumentEnvironment{inscription}{}
{
\let\annumber\empty
\expandafter\parindent\epindent
\bigskip
\obeylines
\everypar{
   { \stepcounter{eplinenumber}
    \ifnum\mymod{\theeplinenumber}{\step_mod}=0           \edef\annumber{\llap{\inscriptionprefix\theeplinenumber\hskip2pt}}\fi
    \ifnum\theeplinenumber=0 \edef\annumber{}\fi
    \ifnum\theeplinenumber=1 
      \edef\annumber{\llap{\inscriptionprefix\theeplinenumber\hskip2pt}}
    \fi
    \annumber
   }
  %}
 }
}
{\bigskip\setcounter{eplinenumber}{0}}
\ExplSyntaxOff

\begin{document}
\begin{inscription}
L(ucius) Albinius f(ilius)] 
[cum Galli ob]siderent Capitolium 
[virgines Ve]stales Caere deduxit 
[ibi sacra at]que ritus sollemnes ne  
[intermitte]rentur curai sibi habuit 
[urbe recup]erata sacra et virgines 
[Romam rev]
\end{inscription}
\end{document}

答案1

请尊重expl3命名约定并避免\cs_set使用先前未声明的函数。

我不知道这是“推荐的方式”,但它使用了 2.3 节中记录的钩子,ltpara并在一定程度上参考了 2.3 节中的示例。但请注意,本节警告这些示例对于生产使用不够谨慎,并且下面的代码不如这些示例谨慎。

康德提供了一个简单的检查,确保我已成功从钩子上移除代码。

‘l3’ 铭文

请注意,我找不到在完全相同的位置插入代码的方法,因此我改变了段落缩进框,据记录可在段落挂钩中修改。

\documentclass{article}
% ateb: https://tex.stackexchange.com/a/702496/
% i gwestiwn Yiannis Lazarides: https://tex.stackexchange.com/q/702429/
\usepackage{kantlipsum}
\ExplSyntaxOn

\dim_new:N \l_lazarides_epindent_dim
\dim_set:Nn \l_lazarides_epindent_dim { 3cm }

\int_new:N \g_lazarides_eplinenumber_int
\int_gzero:N \g_lazarides_eplinenumber_int
\int_new:N \l_lazarides_modstep_int
\int_set:Nn \l_lazarides_modstep_int { 5 }


\cs_new_protected:Nn \lazarides_inscriptionprefix:n {
  \hbox_gset:Nn \g_para_indent_box 
  {
    \skip_horizontal:n { \l_lazarides_epindent_dim }  
    \hbox_overlap_left:n   
    {
      Line : \skip_horizontal:n { 3pt}
      \int_to_arabic:n { #1 }
      \skip_horizontal:n { 2pt }
    }
  }
}

\NewDocumentEnvironment{inscription}{}
{
  \dim_set_eq:NN \parindent \l_lazarides_epindent_dim
  \bigskip
  \obeylines
  \AddToHook { para / begin } [ lazarides ]
  {
    \int_gincr:N \g_lazarides_eplinenumber_int
    \int_compare:nNnTF
    {
      \int_mod:nn { \g_lazarides_eplinenumber_int } { \l_lazarides_modstep_int }
    } = { 0 }
    {
      \lazarides_inscriptionprefix:n { \g_lazarides_eplinenumber_int } 
    }{
      \int_compare:nNnT { \g_lazarides_eplinenumber_int } = { 1 }
      {
        \lazarides_inscriptionprefix:n  { 1 } 
      }
    }
  }
}
{
  \bigskip
  \int_gzero:N \g_lazarides_eplinenumber_int
  \RemoveFromHook { para / begin }[ lazarides ]
}
\ExplSyntaxOff

\begin{document}
\begin{inscription}
  L(ucius) Albinius f(ilius)] 
  [cum Galli ob]siderent Capitolium 
  [virgines Ve]stales Caere deduxit 
  [ibi sacra at]que ritus sollemnes ne  
  [intermitte]rentur curai sibi habuit 
  [urbe recup]erata sacra et virgines 
  [Romam rev]
\end{inscription}

\kant[2]
\end{document}

相关内容