如何制作带有水平线将文本和复选框连接起来的清单?

如何制作带有水平线将文本和复选框连接起来的清单?

使用核对表时,很难看出哪个文本与哪个复选框相对应。我希望有一条水平线将文本与复选框“连接”,这样我的眼睛就能跟着文本找到相应的复选框。

下面的代码是一次尝试(这不是我自己写的,老实说,我不记得从哪里得到它,但我一直在尝试使它适应我的目的),但它不起作用:

结果

\documentclass[11pt]{article}

\usepackage{wasysym}
\usepackage{babel}
\usepackage[latin1]{inputenc}
\usepackage[text={16cm,24cm}]{geometry}

\setlength{\marginparwidth}{1.2in}
\let\oldmarginpar\marginpar
\renewcommand\marginpar[1]{\-\oldmarginpar[\raggedleft #1]%
{\raggedright #1}}

\newenvironment{checklist}{%
  \begin{list}{}{}
  \let\olditem\item
  \renewcommand\item{\olditem -- \marginpar{$\framebox(15,15){}$ $\framebox(15,15){}$} }
  \newcommand\itemline{\olditem -- \marginpar{\rule[-0.5ex]{0.5\marginparwidth}{0.4pt} $\framebox(15,15){}$ $\framebox(15,15){}$}}
}{%
  \end{list}
}

\begin{document}
\begin{checklist}
    \item Item1
%   \itemline Item2
\end{checklist}

\end{document}

在此代码中,“item”命令在末尾仅创建文本和一对复选框。

“itemline”命令应该执行相同的操作,但还会添加前面提到的水平线。

为什么它不能按预期工作?我一直在尝试摆弄它,但却无法让它正常工作。

答案1

扩展\itemline涉及

\marginpar{\rule[-0.5ex]{0.5\marginparwidth}{0.4pt} ...}

随着你\marginpar对此的重新定义

\oldmarginpar[\raggedleft \rule[-0.5ex]{0.5\marginparwidth}{0.4pt} ...]{\raggedright \rule[-0.5ex]{0.5\marginparwidth}{0.4pt} ...}
% from here-->                        <--to here

现在的问题是,对可选参数的扫描\oldmarginpar会收集到第一个之前的所有内容],因此可选参数现在是

\oldmarginpar[\raggedleft \rule[-0.5ex

混乱随之而来。您可以通过添加适当的括号来隐藏括号\rule,但我只会使用完全不同的代码。例如

\documentclass{article}
\usepackage[text={16cm,24cm}]{geometry}

\newenvironment{checklist}{%
   \let\olditem=\item
   \def\item{\olditem\def\item{\addlineandboxes\olditem}}%
   \list{--}{}%
}{%
  \addlineandboxes\endlist
}
\newcommand*{\mycheckbox}{\hbox{\vrule\vbox{\hrule width2ex \kern2ex\hrule}\vrule}}
\newcommand*{\addlineandboxes}{\hrulefill\rlap{\space\mycheckbox\space\mycheckbox}}

\begin{document}
\begin{checklist}
   \item Item1
   \item Item2 long text such that it takes more than one line long text such that it takes more than one line
   \item Item3
\end{checklist}

\end{document}

这使

在此处输入图片描述

根据需要调整参数。

(顺便一提:\usepackage[latin1]{inputenc}??我非常怀疑你想要。并且babel没有语言的加载也不是完全有用的。)

相关内容