我只是按照这里描述的方式创建了一个简单的检查清单:如何生成清单?,我的代码如下:
\documentclass[a4paper,notitlepage]{article}
\usepackage[]{ctex}
\setCJKmainfont{SimSun}
\usepackage{graphicx}
\usepackage[twocolumn]{geometry}
\usepackage{amssymb}
\usepackage{array}
\newcounter{rowno}
\setcounter{rowno}{0}
\usepackage[export]{adjustbox} % draw frame of the image
\geometry{verbose,tmargin=1cm,bmargin=1cm,lmargin=1cm,rmargin=1cm,headheight=1cm,headsep=1cm,footskip=1cm}
\usepackage{wasysym}
\setlength{\marginparwidth}{1.2in}
\let\oldmarginpar\marginpar
\renewcommand\marginpar[1]{\-\oldmarginpar[\raggedleft #1]%
{\raggedright #1}}
\newenvironment{checklist}{%
\begin{list}{}{}% whatever you want the list to be
\let\olditem\item
\renewcommand\item{\olditem -- \marginpar{$\Box$} }
\newcommand\checkeditem{\olditem -- \marginpar{$\CheckedBox$} }
}{%
\end{list}
}
\begin{document}
\begin{checklist}
\checkeditem Open the \TeX book
\checkeditem Find the good page
\item Try to understand
\end{checklist}
\end{document}
问题是,这里我使用了两列选项,但你看到复选框被放在了左边,为什么?你能帮我吗,谢谢。
请参阅下面的屏幕截图:
编辑:这是新代码。我使用
\documentclass[a4paper,notitlepage]{article}
\usepackage{graphicx}
\usepackage[twocolumn]{geometry}
\usepackage{amssymb}
\usepackage{array}
\usepackage[export]{adjustbox} % draw frame of the image
\geometry{verbose,tmargin=1cm,bmargin=1cm,lmargin=1cm,rmargin=1cm,headheight=1cm,headsep=1cm,footskip=1cm}
\usepackage{wasysym}
\setlength{\columnseprule}{0.4pt}
\setlength{\columnsep}{0.5in}
\newcommand\numitem[1]{\item #1 \hfill $\Box$}%
\newcommand\nonnumitem[1]{\item[--] #1 \hfill $\Box$}%
\begin{document}
\begin{enumerate}
\numitem{Open the \TeX book Open the \TeX book Open the abc}
\numitem{Find the good page}
\nonnumitem{Try to understand}
\end{enumerate}
\newpage
\begin{enumerate}
\numitem{Open the \TeX book Open the \TeX book Open the abcdefg}
\numitem{Find the good page}
\nonnumitem{Try to understand}
\end{enumerate}
\end{document}
我发现了一个错误,有时候,框没有放在列的右侧,请参见下面的屏幕截图:
那么,有什么办法可以解决这个问题吗?谢谢。
编辑2 我发现了一些可以解决这个问题的代码片段(强制框转到右侧),只需将代码更改为:
\newcommand\numitem[1]{\item #1 \unskip\linebreak[0]\enspace\hbox{}\nobreak\hfill$\Box$}%
\newcommand\nonnumitem[1]{\item[--] #1 \unskip\linebreak[0]\enspace\hbox{}\nobreak\hfill$\Box$}%
然后,我可以修复这个错误,但是有人能告诉我代码是什么意思吗?谢谢。
答案1
您所指的解决方案在双列模式下不起作用,因为\marginpar
当您在左列时,用于打印的边距是左边距,而当您在右列时,用于打印的边距是右边距。
这是一个简单的解决方案,不使用边距来打印复选框,但它远非完美。
我定义了两个新命令
\newcommand\noncheckeditem[1]{\item[--] #1 \hfill $\Box$}%
\newcommand\checkeditem[1]{\item[--] #1 \hfill $\CheckedBox$}%
当您需要未选中项和选中项时分别使用。
您可以在正常description
环境中使用它们,如下所示:
\documentclass[a4paper,notitlepage]{article}
\usepackage{graphicx}
\usepackage[twocolumn]{geometry}
\usepackage{amssymb}
\usepackage{array}
\usepackage[export]{adjustbox} % draw frame of the image
\geometry{verbose,tmargin=1cm,bmargin=1cm,lmargin=1cm,rmargin=1cm,headheight=1cm,headsep=1cm,footskip=1cm}
\usepackage{wasysym}
\setlength{\columnseprule}{0.4pt}
\setlength{\columnsep}{0.5in}
\newcommand\noncheckeditem[1]{\item[--] #1 \hfill $\Box$}%
\newcommand\checkeditem[1]{\item[--] #1 \hfill $\CheckedBox$}%
\begin{document}
\begin{description}
\checkeditem{Open the \TeX book}
\checkeditem{Find the good page}
\noncheckeditem{Try to understand}
\end{description}
\newpage
\begin{description}
\checkeditem{Open the \TeX book}
\checkeditem{Find the good page}
\noncheckeditem{Try to understand}
\end{description}
\end{document}
结果:
请注意,我在左列和右列各打印了一个,只是为了看看它们看起来怎么样。为此,我还添加了以下几行
\setlength{\columnseprule}{0.4pt}
\setlength{\columnsep}{0.5in}
还请注意,您的左右边距geometry
太小,您会收到警告。您应该3.5cm
同时放置类似lmargin
和 的内容rmargin
。