我正在寻找一种方法来修改我的 tabto 命令,这样如果文本太长而无法放在一行中,文本将在新行中再次制表。
\documentclass[a4paper, 12pt, twosides, openany, liststotoc]{scrbook}
\usepackage{tabto}
\usepackage{lipsum}
\newcommand*{\mytab}{\tabto{4.5cm}}
\begin{document}
\begin{itemize}
\item One \mytab{\lipsum[4]}
\item Two \mytab{\lipsum[4]}
\end{itemize}
\end{document}
感谢问候`
答案1
与其尝试仅使用 来执行此操作tabto
,不如引入\parbox
。然后您只需要知道所涉及的宽度即可定义 的宽度\parbox
。
但是,这种tabto
方法不会跨页面边界破坏项目。
最好放弃tabto
并使用enumitem
来实现相同的目的,因为它将跨越页面边界。
在下面的 MWE 中,我tabto
对项目“一”使用了方法,enumitem
对项目“二”使用了方法。
\documentclass[a4paper, 12pt, twosides, openany, liststotoc]{scrbook}
\usepackage{tabto,enumitem}
\usepackage{lipsum}
\newcommand*{\mytab}[1]{\tabto{4.5cm}\parbox[t]{%
\dimexpr\textwidth-4.5cm-\labelwidth-\labelsep}{#1}}
\begin{document}
\begin{itemize}
\item One \mytab{The \texttt{tabto} way that will not
break across page boundaries. \lipsum[4]}
\item Two
\vspace{\dimexpr-\baselineskip-\parskip}
\begin{itemize}[label=,leftmargin=4.5cm,topsep=0pt]
\item The \texttt{enumitem} way that will break across
page boundaries. \lipsum[4-7]
\end{itemize}
\end{itemize}
\lipsum[3]
\end{document}