对于排版宗教文献的解释如下
- 这包含以逗号分隔的名称列表的诗句。
- 一个计数器将被启动,并且会随着每个名称而增加。
- 每个名字都必须加下划线,并且该计数器必须打印为下标
我试图定义一个命令,但我请求帮助定义一个环境,该环境采用逗号分隔的名称列表,并且还包含一些换行符,这些换行符必须正确排版为换行符。
我不是 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}