![如何连接字符串列表?](https://linux22.com/image/374977/%E5%A6%82%E4%BD%95%E8%BF%9E%E6%8E%A5%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%88%97%E8%A1%A8%EF%BC%9F.png)
我想在序言中定义很多键,并在文档内部进行连接。就像下面的代码:
\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}