如果我理解正确的话,\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}