带有 xstring 宏的动态表/多行

带有 xstring 宏的动态表/多行

我对以下内容有点困惑。由于我TeX对排版以外的用途还不太熟悉,因此希望在这里得到一些帮助。

我已经在这个论坛上搜索了一些有用的帖子,并找到了很多,但我并没有解决我遇到的所有问题。

我想要做的是将 IP 地址列表及其对应内容自动排版FQDNs到表格中。它应该看起来像:

Source: IP1:FQDN1;IP2:FQDN2;...

       |  IP1   FQDN1
Hosts  |  IP2   FQDN2
       |  ...   ...

这是我尝试做的(将代码缩短为基本部分):

\documentclass{article}
\usepackage{xstring}
\usepackage{multirow}

\begin{document}
% test input
\newcommand{\myinput}{IP1:FQDN1;IP2:FQDN2}

\newcommand{\splitstring}[1]{
  % split input into table rows
  \ifx\@empty#1\else
  \saveexpandmode\expandarg
  % split column elements with leading & (after multirow)
  \StrSubstitute{\tmp}{;}{\empty\\&}[\tmp] % fails with: forbidden control sequence found while scanning use of \@xs@next
  % split row elements
  \StrSubstitute{#1}{:}{&}[\tmp]
  \restoreexpandmode\tmp
}

\begin{tabular}{l|ll}
  % StrCount fails (Missing number, treated as zero)
  \multirow{\StrCount{\myinput}{:}}{*}{Hosts} & \splitstring{\myinput}
\end{tabular}
\end{document}

编辑

一些额外的信息:改变线路

 \StrSubstitute{\tmp}{;}{\empty\\&}[\tmp]

 \StrSubstitute{\tmp}{;}{\empty\\}[\tmp]

(并删除&)使此步骤构建时不会出现错误。输出如下所示:

        |  IP1   FQDN1 
 Hosts  |
  IP2   |  FQDN2

如您所见,&表格中需要正确对齐。我想知道为什么替换":"by"&"不会出错,但这个却失败了。

StrCount关于将输出输入到多行环境中没有更多消息。

编辑

我不确定是否可以使用输出进行xstring-functions排版或者是否可以将它们转换为参数使用。

任何帮助是极大的赞赏。

答案1

我始终相信,\multirow通过移除它,可以改进每个带有它的表。以下是其中一种情况:

\documentclass{article}
\usepackage{xstring}

\begin{document}
% test input
\newcommand{\myinput}{IP1:FQDN1;IP2:FQDN2}

\newcommand{\splitstring}[1]{%
  \saveexpandmode\expandarg
  % split input into table rows
  \StrSubstitute{#1}{;}{\noexpand\\}[\tmp]%
  % split columns
  \StrSubstitute{\tmp}{:}{&}[\tmp]%
  \restoreexpandmode
  \begin{tabular}{@{}ll@{}}\tmp\end{tabular}
}

\begin{tabular}{l|l}
Hosts & \splitstring{\myinput}
\end{tabular}

\bigskip

\renewcommand{\myinput}{}

\begin{tabular}{l|l}
Hosts & \splitstring{\myinput}
\end{tabular}

\end{document}

这个想法是建立一个包含地址的内部表。我还展示了它在空输入时也能工作。

在此处输入图片描述

相关内容