在 LaTeX 中制作数组数据结构

在 LaTeX 中制作数组数据结构

有没有办法在 LaTeX 中创建数组。我想编写一个函数来执行此操作(此处数组只有 2 个元素,但我希望能够拥有任意数量的元素)。

\foo{\MakeArray{foo,bar}}

foo|bar-foo&bar

我本可以这样做

\newcommand\foo[2]{\1-\2}
\foo{foo|bar}{foo&bar}

但是我需要输入两次元素,这不是很整洁......

编辑: 遗憾的是,即使你的答案解决了我的问题,它也不适用于我的具体情况,所以我会准确地告诉你。我目前有

\newcommand{\authors}[2][e ]{
  \usepackage[pdfauthor={#1}]{hyperref}
  \author{#2}
}

我使用这种方式

\authors{John Doe, Dark Vador and Yoda}{John Doe \and Dark Vador \and Yoda}

我希望得到相同的结果,而无需指定两次。但是,\and建议的解决方案不起作用。

答案1

加载hyperref包裹首先,然后使用以下命令设置 PDF 文档属性\hypersetup

在此处输入图片描述

\documentclass{article}
\usepackage{hyperref}% http://ctan.org/pkg/hyperref
\newcommand{\authors}[1]{
  {\renewcommand{\and}{\unskip, }\hypersetup{pdfauthor={#1}}}
  \author{#1}
}
\title{My title}
\authors{John Doe \and Dark Vador \and Yoda}
\begin{document}
\maketitle
\end{document}

在里面\authors,的定义\and暂时更新以插入逗号。

答案2

对于特殊情况,还有一个廉价的解决方案。\and可以对 进行重新hyperref定义pdfauthor

\documentclass{article}
\usepackage{hyperref}

\pdfstringdefDisableCommands{\def\and{, }} 

\newcommand*{\authors}[1]{%   
  \hypersetup{pdfauthor={#1}}%
  \author{#1}%
}
\title{Test document}
\authors{John Doe\and Dark Vador\and Yoda}% without space before \and
\begin{document}
\maketitle
\end{document}

结果

pdfinfo报告:

Author:         John Doe, Dark Vador, Yoda

答案3

实际应用对于xparse和来说几乎是微不足道的expl3

\documentclass{article}
\usepackage{xparse}
\usepackage{hyperref}

\ExplSyntaxOn
\NewDocumentCommand{\authors}{O{,}m}
 {
  \legat_authors:nn { #1 } { #2 }
 }
\seq_new:N \g_legat_authors_seq

\cs_new_protected:Npn \legat_authors:nn #1 #2
 {
  \seq_gset_split:Nnn \g_legat_authors_seq { #1 } { #2 }
  \use:x
   {
    \exp_not:N \hypersetup {pdfauthor={ \seq_use:Nn \g_legat_authors_seq { , } } }
   }
  \author{ \seq_use:Nn \g_legat_authors_seq { \and } }
 }
\ExplSyntaxOff

\begin{document}
\authors{John Doe, Dark Vador, Yoda}
\title{Star Wears}

\maketitle

\end{document}

唯一微妙的一点是将作者列表扩展到\hypersetup,并通过获得\use:x

该命令\authors有一个可选参数;如果需要除逗号以外的其他分隔符,则可以在可选参数中设置它:

\authors[;]{Dean Martin; Sammy Davis, Jr; Jerry Lewis}

请注意,这需要最新的 TeX 发行版。

在此处输入图片描述

它是如何工作的?该\seq_gset_split:Nnn函数(全局)将第三个参数存储为序列的元素,使用第二个参数作为项之间的分隔符。然后可以根据需要多次使用此序列。在这里,我们首先使用它来将逗号分隔的作者列表传递给\hypersetup,然后将其作为 的参数传递给\author

答案4

由于我无法让您的输出提供任何输出,我改变了一些定义以生成您请求的形式的解析输出。

\documentclass{article}
\usepackage{stringstrings}

\renewcommand\and{\textbf{AND}}
\newcommand\MYusepackage[2][1]{[#1]\{#2\}\par}
\newcommand\MYauthor[1]{#1}

\newcommand\authors[1]{%
  \MYusepackage[pdfauthor={#1}]{hyperref}%
  \encodetoken{\and}
  \convertword[e]{#1}{~and~}{, }%
  \convertchar[e]{\thestring}{,}{ \and}%
  \retokenize{\thestring}%
  \MYauthor{\thestring}%
  \decodetoken{\and}%
}
\begin{document}
\authors{John Doe, Dark Vador and Yoda}
\end{document}

在此处输入图片描述

相关内容