如何连接字符串列表?

如何连接字符串列表?

我想在序言中定义很多键,并在文档内部进行连接。就像下面的代码:

\documentclass{article}
\usepackage{etoolbox}

%---------------------------------------------------------------------
% my cls files
\providetoggle{firstkey}
\settoggle{firstkey}{true}

\newcommand{\keys}[1]{\newcommand{\mykeys}{#1.}}
\newcommand{\key}{}

\renewcommand{\key}[1]{\iftoggle{firstkey}{#1}{; #1}\settoggle{firstkey}{false}}

%-----------------------------------------------------------------------

\keys{
    \key{aaaaa}
    \key{bbbbb}
    \key{ccccc}
}

\begin{document}

\mykeys

\end{document}

但是,此代码生成:

aaaaa;bbbbb;ccccc。

我怎样才能删除这些空白并获得:

aaaaa;bbbbb;ccccc。

答案1

\ignorespaces在适当的地方添加。

\documentclass{article}
\usepackage{etoolbox}

%---------------------------------------------------------------------
% my cls files
\providetoggle{firstkey}
\settoggle{firstkey}{true}

\newcommand{\keys}[1]{\newcommand{\mykeys}{\ignorespaces#1.}}
\newcommand{\key}[1]{%
  \iftoggle{firstkey}{#1}{; #1}%
  \settoggle{firstkey}{false}%
  \ignorespaces
}

%-----------------------------------------------------------------------

\keys{
    \key{aaaaa}
    \key{bbbbb}
    \key{ccccc}
}

\begin{document}

X\mykeys X

\end{document}

这些X字符用于表明没有插入虚假空格。

在此处输入图片描述

另一种方法是expl3。用户使用更自然的语法输入键, 的工作就是expl3对其进行规范化。示例中有一个尾随分号,它会产生一个空键,但可以轻松检查并删除它。

\documentclass{article}
\usepackage{xparse}

%---------------------------------------------------------------------
% my cls files

\ExplSyntaxOn
\NewDocumentCommand{\keys}{m}
 {
  \seq_set_split:Nnn \l_tmpa_seq { ; } { #1 }
  \tl_if_blank:xT { \seq_item:Nn \l_tmpa_seq { -1 } }
   {% user has a trailing semicolon, remove the last (empty) item
    \seq_pop_right:NN \l_tmpa_seq \l_tmpa_tl
   }
  \tl_set:Nx \mykeys { \seq_use:Nn \l_tmpa_seq { ;~ } .}
 }
\prg_generate_conditional_variant:Nnn \tl_if_blank:n { x } { T }
\ExplSyntaxOff

%-----------------------------------------------------------------------

\keys{
  aaaaa;
  bbbbb;
  ccccc;
}

\begin{document}

X\mykeys X

\end{document}

答案2

在每个键后添加一个%,因为 TeX 中的新行是一个空格。参见行末百分号(%)有什么用?

\documentclass{article}
\usepackage{etoolbox}

%---------------------------------------------------------------------
% my cls files
\providetoggle{firstkey}
\settoggle{firstkey}{true}

\newcommand{\keys}[1]{\newcommand{\mykeys}{#1.}}
\newcommand{\key}{}

\renewcommand{\key}[1]{\iftoggle{firstkey}{#1}{; #1}\settoggle{firstkey}{false}}

%-----------------------------------------------------------------------

\keys{
    \key{aaaaa}%
    \key{bbbbb}%
    \key{ccccc}%
}

\begin{document}

\mykeys

\end{document}

图片

相关内容