多列环境中的行距​​和缩进错误

多列环境中的行距​​和缩进错误

我正在使用 LaTeX 制作答题纸。我想控制列数,multicol为此我使用了该包。为了强制分列,我还使用了\columnbreak命令。

我面临这些问题

  1. 每列的第一行总是缩进不好。
  2. 每列第一行与第二行之间的间距不好。
  3. 每列下方的垂直空间太多。
  4. 我还想将数字[1][2]等右对齐。

任何帮助,将不胜感激。

这是我的 MWE。

\documentclass{article}
\usepackage{multicol,pgf,pgffor,calculator,ifthen}
\setlength{\columnseprule}{0.4pt}
\newcommand{\AuxAnswerspace}[2]{
    \DIVIDE{#2}{#1}{\Auxlinesx}
    \FLOOR{\Auxlinesx}{\Auxlinesx}
    \foreach\x in {1,...,#2} {
        \MODULO{\x}{\Auxlinesx}{\Auxstartx}
        \ifthenelse{\equal{\Auxstartx}{1}}{}{\vspace{.07cm}}
        \noindent[\textbf{\x}] \hfill\newline
        \ifthenelse{\equal{\Auxstartx}{0}}{\vfill\null\columnbreak}{\vspace{.07cm}}
    }
}

\newcommand{\answerspace}[2]{
    \hrule
    \begin{multicols}{#1}
        \noindent\AuxAnswerspace{#1}{#2}
    \end{multicols}
    \hrule
}
\begin{document}
    \section*{Part-I}
    \answerspace{3}{15}
    \vspace{.3cm}
    Correct = \hfill Wrong = \hfill Marks = \hspace{3cm}
    \vspace{.3cm}
    \hrule
\end{document}

在此处输入图片描述

答案1

我认为下面的代码可以解答您的所有问题。它产生:

在此处输入图片描述

正如已经指出的那样,没有以 结尾的行%会导致问题。除此之外,您将\newlines 放在每行的末尾,包括那些出现在 之前的行\columnbreak,这会破坏行距。由于您已经加载了前列腺素包,我建议使用它进行计算。我也不喜欢ifthenelse构造,所以我改用它,\ifnum...\fi因为我发现它更清晰、更干净。

完整代码如下:

\documentclass{article}
\usepackage{multicol,pgf,pgffor}
\setlength{\columnseprule}{0.4pt}
\newcommand{\AuxAnswerspace}[2]{%
    \pgfmathsetmacro\Auxlines{int(ceil(#2/#1))}%
    \foreach \x [evaluate=\x as \line using {int(mod(\x,\Auxlines))}] in {1,...,#2} {%
        \hspace*{2em}\llap{[\textbf{\x}]}%
        \ifnum\line=0\vfill\columnbreak\else\newline\fi%
    }%
}
\parindent=0pt

\newcommand{\answerspace}[2]{%
    \hrule%
    \begin{multicols}{#1}%
        \AuxAnswerspace{#1}{#2}%
    \end{multicols}%
    \hrule%
}
\begin{document}
    \section*{Part-I}
    \answerspace{3}{15}
    \vspace{.3cm}
    Correct = \hfill Wrong = \hfill Marks = \hspace{3cm}
    \vspace{.3cm}
    \hrule
\end{document}

最后,为了使数字右对齐,我使用了\hspace*{2em}\llap{[\textbf{\x}]。这将插入2em空格宽度,然后\llap{...}将内容写入左侧,而无需移动“光标”位置。

答案2

问题在于各种换行符会插入空格。下面%在各行末尾插入以修复这些问题。

\documentclass{article}
\usepackage{multicol,pgf,pgffor,calculator,ifthen}
\setlength{\columnseprule}{0.4pt}
\newcommand{\AuxAnswerspace}[2]{%
    \DIVIDE{#2}{#1}{\Auxlinesx}
    \FLOOR{\Auxlinesx}{\Auxlinesx}
    \foreach\x in {1,...,#2} {%
        \MODULO{\x}{\Auxlinesx}{\Auxstartx}
        \ifthenelse{\equal{\Auxstartx}{1}}{}{\vspace{.07cm}}%
        \noindent[\textbf{\x}] \hfill\newline
        \ifthenelse{\equal{\Auxstartx}{0}}{\vfill\null\columnbreak}{\vspace{.07cm}}%
    }
}

\newcommand{\answerspace}[2]{
    \hrule
    \begin{multicols}{#1}%
        \noindent\AuxAnswerspace{#1}{#2}
    \end{multicols}
    \hrule
}
\begin{document}
    \section*{Part-I}
    \answerspace{3}{15}
    \vspace{.3cm}
    Correct = \hfill Wrong = \hfill Marks = \hspace{3cm}
    \vspace{.3cm}
    \hrule
\end{document}

相关内容