我正在尝试创建一个命令,将(短)关键字移至文本的左侧。它们应该“右对齐”,关键字和文本之间应有固定的间距。
下面的命令可以完成我想要的操作,但前提是文本是否缩进 - 而不是组合,例如在新部分开始之后。
我可以检查注释是否在缩进段落中\hspace{\parindent}
并有条件地发出吗?或者有更好的方法吗?我不想为此 使用marginnote
包(或一般来说)。marginpar
\documentclass{scrartcl}
\newcommand{\parnote}[1]{%
\begingroup
\setlength{\fboxsep}{0pt}
\hspace*{0pt}\llap{%
\framebox[2cm][r]{% normally use makebox
#1%
% \hspace{\parindent}%
\hspace{8pt}%
}%
}%
\endgroup
\ignorespaces
}
\begin{document}
\section{Dummy}
\parnote{Keyword 1} This paragraph has no indent.
\bigskip
\parnote{Other Word} This paragraph has an indent.
\end{document}
答案1
包装tabto
非常适合这种事情。最棒的是,可以\tabto
随时发出,甚至在线路中途也可以。这里我演示了比 更靠左的盒子,但可以通过将设置为 -2cm 而不是 -1 英寸来\llap
使其类似。\tabto
\documentclass{scrartcl}
\usepackage{tabto}
\newcommand\mnote[1]{\tabto*{-1in}\framebox[2cm][r]{#1 }\tabto{\TabPrevPos}}
\begin{document}
\section{Dummy}
this is a test\mnote{item}. continue\ldots
\bigskip
And now\mnote{item 2}, for another test.
\end{document}
答案2
这是一个使用选项zref
模块savepos
将框与左边距对齐。一些指导来自我想将下一行缩进指定的位置:
\documentclass{scrartcl}
\usepackage{zref-savepos}
\makeatletter
% \zsaveposx is defined since 2011/12/05 v2.23 of zref-savepos
\@ifundefined{zsaveposx}{\let\zsaveposx\zsavepos}{}
\newcounter{hposcnt}
\renewcommand*{\thehposcnt}{hpos\number\value{hposcnt}}
\newcommand*{\parnote}[1]{% \parnote{<stuff>}
\leavevmode%
\stepcounter{hposcnt}%
\zsaveposx{\thehposcnt}%
\zref@refused{\thehposcnt}%
\kern\dimexpr-\zposx{\thehposcnt}sp+1in+\oddsidemargin\relax%
{\setlength{\fboxsep}{0pt}%
\llap{\framebox[3cm][r]{\strut#1\hspace{8pt}}}}%
\kern\dimexpr-1in-\oddsidemargin+\zposx{\thehposcnt}sp\relax%
\ignorespaces
}
\makeatother
\begin{document}
\section{Dummy}
\parnote{Keyword 1} This paragraph has no indent.
\bigskip
\parnote{Other Word} This paragraph has an indent.
\bigskip
\noindent\parnote{Final word} This paragraph has an indent.
\end{document}
由于zref
使用“标签”来识别位置,这需要至少两次编译直到引用稳定下来。