我尝试生成一些会议代码。因此,我想列出参与者及其机构的名称,并按机构的字母顺序将其打印出来。为了实现这一点,我想使用 中的 tcbraster tcolorbox
。我必须使用 遍历我的列表,\@for
并用内容填充tcolorbox
es。这很好用。但在 tcbraster 中,第一行开头有少量空间,因此我得到的 comln 比要求的少。如果我将 的宽度减小tcbraster
到 97%,\textwidth
它就可以正常工作。如果我手动执行 tcbraster,它也可以正常工作。我怎样才能避免让生活变得如此艰难和输出不那么好的小额外空间。
这是一个最小的例子和生成的输出:
\documentclass[a4paper]{scrartcl}
\usepackage[raster]{tcolorbox}
\usepackage{lstdoc}
\usepackage{trimspaces}
\usepackage{xstring}
\usepackage[ngerman]{babel}
\usepackage[latin1]{inputenc}
\makeatletter
\let\Institutionen\@empty
% Definition der Umgebungen
\newenvironment{Einladung}{\Einladungskopfsetzen}{}
\newcommand*{\ifundefined}[1]{%
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname #1\endcsname\relax
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
}
%Listprocessing
\def\addtolist#1#2{%
\expandafter\lst@lAddTo\csname #1\endcsname{#2,}
\expandafter\lst@BubbleSort\csname #1\endcsname
}
\renewcommand{\ifinlist}[3]{\@for\next:=#1\do{\ifthenelse{\equal\next{\trim@spaces{#2}}}{#3}{\relax}}}
%\IfSubStr[*][number]{string}{stringA}{true}{false}
% Teilnehmerbefehle definieren
\def\teilnBearbeiten#1#2#3#4{
\IfSubStr{\Institutionen}{#3} %%% Pr�fen, ob Institution in Liste bereits enthalten ist
{ %%% Institution in Liste enthalten, tue nichts
}
{ %%% Institution in Liste nicht enthalten, also in Liste aufnehmen
\addtolist{Institutionen}{#3}
\expandafter\let\csname #3\endcsname\@empty
}
\addtolist{#3}{#1#2#3}
\expandafter\gdef\csname #1#2#3\endcsname{\csname #4\endcsname{\trim@spaces{#1}, \trim@spaces{#2}}}
}
\def\teiln#1,#2,#3;{
\teilnBearbeiten{#1}{#2}{#3}{relax} % anstelle des relax kann ein Formatbefehl stehen z.B. 'uwave' aus 'ulem'
}
\newcommand{\Einladungskopfsetzen}{
\begin{tcbraster}[raster columns=3, raster equal height, size=small, colframe=red!50!black, colback=white!10!white, colbacktitle=black!40!white, toprule=0pt, bottomrule=0pt, leftrule=0pt, rightrule=0pt, titlerule=0pt, arc=0pt]
\@for\nextInstitution:=\Institutionen\do{
\ifx\empty\nextInstitution\empty
\else
\begin{tcolorbox}[title=\nextInstitution]
\edef\tempListe{\csname\nextInstitution\endcsname}
\@for\nextEintrag:=\tempListe\do{
\ifx \empty\nextEintrag\empty
\else
\csname\nextEintrag\endcsname\\
\fi
}
\end{tcolorbox}
\fi
}
\end{tcbraster}
}
\newcommand{\EinladungskopfsetzenOHNE}{
\begin{tcbraster}[raster width=0.97\textwidth, raster columns=3, raster equal height, size=small, colframe=red!50!black, colback=white!10!white, colbacktitle=black!40!white, toprule=0pt, bottomrule=0pt, leftrule=0pt, rightrule=0pt, titlerule=0pt, arc=0pt]
\@for\nextInstitution:=\Institutionen\do{
\ifx\empty\nextInstitution\empty
\else
\begin{tcolorbox}[title=\nextInstitution]
\edef\tempListe{\csname\nextInstitution\endcsname}
\@for\nextEintrag:=\tempListe\do{
\ifx \empty\nextEintrag\empty
\else
\csname\nextEintrag\endcsname\\
\fi
}
\end{tcolorbox}
\fi
}
\end{tcbraster}
}
\begin{document}
\teiln Name1,Vorname1,Institution1;
\teiln Name2,Vorname2,Institution1;
\teiln Name3,Vorname3,Institution3;
\teiln Name4,Vorname4,Institution4;
\teiln Name5,Vorname5,Institution5;
\section{tcbraster ohne `raster width=0.97\textbackslash textwidth'}
\begin{Einladung}
Agenda
\end{Einladung}
\section{tcbraster mit `raster width=0.97\textbackslash textwidth'}
\EinladungskopfsetzenOHNE
\section{tcbraster ohne Schleifen}
\begin{tcbraster}[raster columns=3, raster equal height, size=small, colframe=red!50!black, colback=white!10!white, colbacktitle=black!40!white, toprule=0pt, bottomrule=0pt, leftrule=0pt, rightrule=0pt, titlerule=0pt, arc=0pt]
\begin{tcolorbox}[title=TITEL]
Box Text
\end{tcolorbox}
\begin{tcolorbox}[title=TITEL]
Box Text
\end{tcolorbox}
\begin{tcolorbox}[title=TITEL]
Box Text
\end{tcolorbox}
\begin{tcolorbox}[title=TITEL]
Box Text
\end{tcolorbox}
\begin{tcolorbox}[title=TITEL]
Box Text
\end{tcolorbox}
\end{tcbraster}
\end{document}
答案1
-- 部分缺少多个%
字符\do{
,导致出现空白(和水平偏移),如果剩余空间不足,则会导致换行到下一行tcolorbox
。
\documentclass[a4paper]{scrartcl}
\usepackage[raster]{tcolorbox}
\usepackage{lstdoc}
\usepackage{trimspaces}
\usepackage{xstring}
\usepackage[ngerman]{babel}
\usepackage[latin1]{inputenc}
\makeatletter
\let\Institutionen\@empty
% Definition der Umgebungen
\newenvironment{Einladung}{\Einladungskopfsetzen}{}
\newcommand*{\ifundefined}[1]{%
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname #1\endcsname\relax
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
}
%Listprocessing
\def\addtolist#1#2{%
\expandafter\lst@lAddTo\csname #1\endcsname{#2,}
\expandafter\lst@BubbleSort\csname #1\endcsname
}
\renewcommand{\ifinlist}[3]{\@for\next:=#1\do{\ifthenelse{\equal\next{\trim@spaces{#2}}}{#3}{\relax}}}
%\IfSubStr[*][number]{string}{stringA}{true}{false}
% Teilnehmerbefehle definieren
\def\teilnBearbeiten#1#2#3#4{
\IfSubStr{\Institutionen}{#3} %%% Pr�fen, ob Institution in Liste bereits enthalten ist
{ %%% Institution in Liste enthalten, tue nichts
}
{ %%% Institution in Liste nicht enthalten, also in Liste aufnehmen
\addtolist{Institutionen}{#3}
\expandafter\let\csname #3\endcsname\@empty
}
\addtolist{#3}{#1#2#3}
\expandafter\gdef\csname #1#2#3\endcsname{\csname #4\endcsname{\trim@spaces{#1}, \trim@spaces{#2}}}
}
\def\teiln#1,#2,#3;{%
\teilnBearbeiten{#1}{#2}{#3}{relax} % anstelle des relax kann ein Formatbefehl stehen z.B. 'uwave' aus 'ulem'
}
\newcommand{\Einladungskopfsetzen}{%
\begin{tcbraster}[raster columns=3, raster equal height, size=small, colframe=red!50!black, colback=white!10!white, colbacktitle=black!40!white, toprule=0pt, bottomrule=0pt, leftrule=0pt, rightrule=0pt, titlerule=0pt, arc=0pt]
\@for\nextInstitution:=\Institutionen\do{%
\ifx\empty\nextInstitution\empty
\else
\begin{tcolorbox}[title=\nextInstitution]
\edef\tempListe{\csname\nextInstitution\endcsname}
\@for\nextEintrag:=\tempListe\do{
\ifx \empty\nextEintrag\empty
\else
\csname\nextEintrag\endcsname\\
\fi
}
\end{tcolorbox}
\fi
}
\end{tcbraster}
}
\newcommand{\EinladungskopfsetzenOHNE}{%
\begin{tcbraster}[raster width=0.97\textwidth, raster columns=3, raster equal height, size=small, colframe=red!50!black, colback=white!10!white, colbacktitle=black!40!white, toprule=0pt, bottomrule=0pt, leftrule=0pt, rightrule=0pt, titlerule=0pt, arc=0pt]
\@for\nextInstitution:=\Institutionen\do{%
\ifx\empty\nextInstitution\empty
\else
\begin{tcolorbox}[title=\nextInstitution]
\edef\tempListe{\csname\nextInstitution\endcsname}
\@for\nextEintrag:=\tempListe\do{
\ifx \empty\nextEintrag\empty
\else
\csname\nextEintrag\endcsname\\
\fi
}
\end{tcolorbox}
\fi
}
\end{tcbraster}
}
\begin{document}
\teiln Name1,Vorname1,Institution1;
\teiln Name2,Vorname2,Institution1;
\teiln Name3,Vorname3,Institution3;
\teiln Name4,Vorname4,Institution4;
\teiln Name5,Vorname5,Institution5;
\section{tcbraster ohne `raster width=0.97\textbackslash textwidth'}
\begin{Einladung}
Agenda
\end{Einladung}
\section{tcbraster mit `raster width=0.97\textbackslash textwidth'}
\EinladungskopfsetzenOHNE
\section{tcbraster ohne Schleifen}
\begin{tcbraster}[raster columns=3, raster equal height, size=small, colframe=red!50!black, colback=white!10!white, colbacktitle=black!40!white, toprule=0pt, bottomrule=0pt, leftrule=0pt, rightrule=0pt, titlerule=0pt, arc=0pt]
\begin{tcolorbox}[title=TITEL]
Box Text
\end{tcolorbox}
\begin{tcolorbox}[title=TITEL]
Box Text
\end{tcolorbox}
\begin{tcolorbox}[title=TITEL]
Box Text
\end{tcolorbox}
\begin{tcolorbox}[title=TITEL]
Box Text
\end{tcolorbox}
\begin{tcolorbox}[title=TITEL]
Box Text
\end{tcolorbox}
\end{tcbraster}
\end{document}