计数名称并将计数标记为下标的环境

计数名称并将计数标记为下标的环境

对于排版宗教文献的解释如下

  1. 这包含以逗号分隔的名称列表的诗句。
  2. 一个计数器将被启动,并且会随着每个名称而增加。
  3. 每个名字都必须加下划线,并且该计数器必须打印为下标

我试图定义一个命令,但我请求帮助定义一个环境,该环境采用逗号分隔的名称列表,并且还包含一些换行符,这些换行符必须正确排版为换行符。

我不是 LaTeX 专家,但我尝试排版一些从来不需要此功能的论文。提前致谢。

我尝试了以下

\documentclass[a4paper, 10pt]{memoir}
\usepackage{amsmath,ulem}
%%%%%%%Definition of Name Command
\newcommand{\scdots}[2][]{\mathinner{#1\overset{#2}{\cdots}#1}}
\newcommand\ovline{\bgroup\markoverwith{{\rule[-0.5ex]{5pt}{0.4pt}}}\ULon}
\newcounter{nameCounter}
%\setcounter{\nameCounter}{0}
\newcommand {\name}[1]{{\ovline {#1}}
\stepcounter{nameCounter}$_{\arabic{nameCounter}}$}
\begin{document}
\name{First One}   \name{Second Name}  \name{Third Name}
%%%%%Request for defining an Environment of Names  - as mentioned below
%\begin{names}
%First One, Second One, Third One \\
%Fourth One, Fifth Name.
%\end{names}
\end{document}

答案1

xparse下面是使用和的实现environ

环境的内容在 处被分成多行\\。然后每行在逗号处被分割,每个项目作为 的参数输入\name。这些行在项目之间用逗号空格重建,并按顺序打印。

必须将最后的标点符号作为可选参数添加到环境中。

\documentclass[a4paper, 10pt]{memoir}
\usepackage{amsmath,ulem,xparse,environ}

%%%%%%%Definition of Name Command
\newcommand{\scdots}[2][]{%
  \mathinner{#1\overset{#2}{\cdots}#1}%
}
\newcommand\ovline{%
  \bgroup\markoverwith{\rule[-0.5ex]{5pt}{0.4pt}}\ULon
}
\newcounter{nameCounter}
%\setcounter{\nameCounter}{0}
\newcommand{\name}[1]{%
  \ovline{#1}%
  \stepcounter{nameCounter}$\,_{\arabic{nameCounter}}$%
}

\ExplSyntaxOn
\NewEnviron{names}[1][]
 {
  \seq_set_split:NnV \l_majety_name_lines_seq { \\ } \BODY
  \seq_pop_left:NN \l_majety_name_lines_seq \l_majety_name_firstline_tl
  \majety_name_process_line:Vn \l_majety_name_firstline_tl { }
  \seq_map_inline:Nn \l_majety_name_lines_seq
   {
    \majety_name_process_line:nn { ##1 } { ,\\ }
   }
  #1
 }

\seq_new:N \l_majety_name_lines_seq
\seq_new:N \l_majety_name_oneline_seq
\tl_new:N \l_majety_name_firstline_tl
\tl_new:N \l_majety_name_firstname_tl

\cs_new_protected:Npn \majety_name_process_line:nn #1 #2
 {
  #2 % can be empty or ',\\'
  \seq_set_split:Nnn \l_majety_name_oneline_seq { , } { #1 }
  \seq_pop_left:NN \l_majety_name_oneline_seq \l_majety_name_firstname_tl
  \majety_name_process_name:Vn \l_majety_name_firstname_tl { }
  \seq_map_inline:Nn \l_majety_name_oneline_seq
   {
    \majety_name_process_name:nn { ##1 } { ,~ }
   }
 }

\cs_new_protected:Npn \majety_name_process_name:nn #1 #2
 {
  #2 % can be empty or ',~'
  \name{#1}
 }

\cs_generate_variant:Nn \majety_name_process_line:nn { V }
\cs_generate_variant:Nn \majety_name_process_name:nn { V }

\ExplSyntaxOff

\begin{document}
\name{First One}   \name{Second Name}  \name{Third Name}

\bigskip

\begin{names}[.]
First One, Second One, Third One \\
Fourth One, Fifth Name
\end{names}

\end{document}

enter image description here

相关内容