\textwidth 确实会改变列表中的值

\textwidth 确实会改变列表中的值

如果我理解正确的话,\textwidth不应该在列表内更改其值。但是如果我执行以下操作,列表内部和外部的缩进将不一样:

\documentclass{scrreprt}
\usepackage{tabto}

\begin{document}

\begin{itemize}
\item Test \tabto{0.5\textwidth} Test
\end{itemize}
\tabto{0.5\textwidth} Test

\end{document}

在此处输入图片描述

我究竟做错了什么?

答案1

你没有做错什么。你只是没有考虑\tabto从哪里开始:它从当前左边距开始,在列表中向右移动。

由于移位量始终已知并存储在参数中\@totalleftmargin,因此您可以定义一个宏来处理这个问题:

\documentclass{scrreprt}
\usepackage{tabto}

\makeatletter % we need to access a command with @ in its name
\newcommand\xtabto[1]{%
  \tabto{\dimexpr#1-\@totalleftmargin\relax}%
}
\makeatother

\begin{document}

\begin{itemize}
\item Test \xtabto{0.5\textwidth} Test
  \begin{enumerate}
  \item Test \xtabto{0.5\textwidth} Test
  \end{enumerate}
\end{itemize}
\xtabto{0.5\textwidth} Test

\end{document}

您会发现这也适用于二级列表环境。您可以交替使用\xtabto\tabto外部列出环境;但自始至终只坚持一个命令可能更明智。

在此处输入图片描述

答案2

\documentclass{scrreprt}
\usepackage{tabto}

\begin{document}

\begin{itemize}
\item Test \tabto{\dimexpr0.5\textwidth-\labelwidth-\labelsep} Test
\end{itemize}
\tabto{0.5\textwidth} Test

\end{document}

相关内容