嵌套命令中的 Tab 键错误

嵌套命令中的 Tab 键错误

因此,我在我的文档类中定义了两个这样的命令。

\newcommand{\skillgroup}[2]{
\begin{tabbing}
\hspace{5mm} \= \kill
\sqbullet \>\+ \textbf{#1} \\
\begin{minipage}{\smallertextwidth}
\vspace{2mm}
#2
\end{minipage}
\end{tabbing}
}

\newcommand{\skilllang}[3]{
\begin{tabbing}
\hspace*{5cm}\=\hspace*{4cm}\= \kill
#1 \> #2 \> \textit{#3}
\end{tabbing}
}

如果在其中输入文本,该\skillgroup命令可以正常工作,但是当您想通过该\skilllang命令插入一系列制表符内容时,前一个命令的缩进似乎被转义了,并且制表符序列从行首开始,而不是像简单文本那样缩进。

在main.tex中使用:

\skillgroup{Software Engineering}{
\skilllang{Programing languages }{C\# / XAML, Java}{...}
}

输出如下图所示。

第一个是 \skilllang,第二个只是纯文本

答案1

tabbing在查看了-environment的实现之后源2e.pdf显然,这个环境的实现方式是嵌套不是意图/是不是可能。例如,它基于\trivlist不考虑嵌套时左边距的相加。

您可以让 LaTeX 将内容放入暂存箱,然后在里面使用该暂存箱tabbing

在对-package的用法做了一些猜测之后\sqbullet,我得出了以下示例:\smallertextwidthmathabx

\documentclass{article}
\usepackage{mathabx}

\newbox\myscratchbox
\makeatletter
\newcommand\createmyscratchbox[1]{%
  \setbox\myscratchbox\vtop{%
    \hsize=\smallertextwidth
    \linewidth=\smallertextwidth
    \topsep=0pt %
    \partopsep=0pt %
    #1%
  }%
}%
\makeatother

\newlength\smallertextwidth
\setlength\smallertextwidth{10cm}

\newcommand{\skillgroup}[2]{%
\begin{tabbing}%
\hspace{5mm} \= \kill
\ensuremath{\sqbullet} \>\+ \textbf{#1} \\
\begin{minipage}{\smallertextwidth}%
\vspace{2mm}%
#2%
\end{minipage}%
\end{tabbing}%
}

\newcommand{\skilllang}[3]{%
\begin{tabbing}%
\hspace*{5cm}\=\hspace*{4cm}\= \kill
#1 \> #2 \> \textit{#3}%
\end{tabbing}%
}%

\begin{document}

\createmyscratchbox{%
  \skilllang{Programing languages }{C\# / XAML, Java}{whatsoever}%
}%
\skillgroup{Software Engineering}{%
  \box\myscratchbox
}%

\skillgroup{Blubb Blubb}{Bla bla}%

\end{document}

在此处输入图片描述

或者,您可以在同一个tabbing环境中完成所有操作:

\documentclass{article}
\usepackage{mathabx}

\newcommand{\skillgroup}[2]{%
\begin{tabbing}%
\hspace*{5mm}\=\hspace*{5cm} \= \hspace*{4cm} \= \kill
\ensuremath{\sqbullet}\+\>\textbf{#1}\\
\rule{0mm}{\dimexpr\ht\strutbox+2mm\relax}#2%
\end{tabbing}%
}


\newcommand\setbreakandhyphenationparameters{%
  \sloppy
}%

\makeatletter
\newcommand{\skilllang}[3]{%
  \vtop{\hsize=5cm \noindent\setbreakandhyphenationparameters\hspace{0pt}#1\hspace{0pt}\strut\hss\par}\>%
  \vtop{\hsize=4cm \noindent\setbreakandhyphenationparameters\hspace{0pt}#2\hspace{0pt}\strut\hss\par}\>%
  \settowidth\@tempdima{ }%
  \vtop{\hsize=\dimexpr\textwidth-5mm-9cm-2\@tempdima\relax\noindent\setbreakandhyphenationparameters\textit{\hspace{0pt}#3\hspace{0pt}}\strut\par}\\%
}%
\makeatother

\begin{document}

\noindent A \hfill B

\skillgroup{Software Engineering}{%
  \skilllang{Programing languages}{C\# / XAML, \hfill Java}{whatsoever whatsoever whatsoever whatsoever}%
  \skilllang{Programing languages}{C\# / XAML, Java}{There should happen some line-breaking. There should happen some line-breaking.}%
  \skilllang{Programing languages 
             Programing languages 
             Programing languages}{C\# / XAML, Java}{whatsoever}%
}%

\skillgroup{Blubb Blubb}{Bla bla}%

\end{document}

在此处输入图片描述

答案2

我已设法使用表格环境解决了这个问题。这是\skilllang上述解决方案。使用此方法保持不变。

\newcommand{\skilllang}[3]{
\begin{tabular}{@{} m{4cm} m{4cm} m{6cm}}
{#1}  &  {#2} & {#3} 
\end{tabular}
\\
}

相关内容