2

I'd like to take the following code, and make the rows alternate background colors, without using a table, as that breaks twocolumn, and without using multicol, as that breaks floats. Is this possible?

\documentclass[10pt,twocolumn]{article}
\usepackage[english]{babel}
\usepackage{scrextend}

\newcounter{foonum}
\newcommand{\roll}{
  \stepcounter{foonum}
  \arabic{foonum}
}

\begin{document}

\begin{labeling}{\textbf{roll}}
\item [\textbf{roll}] \textbf{item}
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\item [\roll] Item
\end{labeling}

\end{document}

EDIT: Using @Pouya 's answer, this is what I have come up with. But I need to find a way to reduce or eliminate the huge gaps between items.

\documentclass[10pt,twocolumn]{article}
\usepackage[english]{babel}
\usepackage{scrextend}
\usepackage{xcolor}
\usepackage[framemethod=tikz]{mdframed}
\usepackage{framed}
\colorlet{shadecolor}{blue!20}
\usepackage{adjustbox}
\newcounter{foonum}
\newcommand{\roll}{
  \stepcounter{foonum}
  \arabic{foonum}
}


\newcommand{\AltItem}[1]{%
    \ifodd \value{foonum} 
         \begin{mdframed}[hidealllines=true,
                          backgroundcolor=blue!20,
                          innerleftmargin=1.5pt,
                          innerrightmargin=10pt,
                          leftmargin=-18pt,
                          innertopmargin=-6pt,
                          innerbottommargin=6pt]
           \item [\roll] \hangindent=15pt #1%
         \end{mdframed}
    \else  
         \begin{mdframed}[hidealllines=true,
                          backgroundcolor=red!20,
                          innerleftmargin=1.5pt,
                          innerrightmargin=10pt,
                          leftmargin=-18pt,
                          innertopmargin=-6pt,
                          innerbottommargin=6pt]
           \item [\roll] \hangindent=15pt #1%
         \end{mdframed}
    \fi
}

\begin{document}

\begin{labeling}{\textbf{roll}}
\item [\textbf{roll}] \textbf{item}
\AltItem {This is a longer sentence. This is a longer sentence. This is a longer sentence. This is a longer sentence. This is a longer sentence. This is a longer sentence.}
\AltItem {This is a longer sentence. This is a longer sentence. This is a longer sentence. This is a longer sentence. This is a longer sentence. This is a longer sentence.}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\end{labeling}

\end{document}
raevol
  • 21

1 Answers1

1

The following is a no-so-elegant solution and has lots of room for improvement. It takes your counter, foonum, and checks to see if the value is odd or not and based on that sets the background color.

There are two caveats: 1. As it is, you should renew the item command and 2. The highlighting itself needs adjustments. For the later, please refer to this comprehensive answer and try for yourself. My answer just an starting point...

\documentclass[10pt,twocolumn]{article}
\usepackage[english]{babel}
\usepackage{scrextend}
\usepackage{xcolor}
\usepackage[framemethod=tikz]{mdframed}
\usepackage{framed}
\colorlet{shadecolor}{blue!20}
\usepackage{adjustbox}
\newcounter{foonum}
\newcommand{\roll}{
  \stepcounter{foonum}
  \arabic{foonum}
}


\newcommand{\AltItem}[1]{%
    \ifodd \value{foonum} 
        %% test:
        % \textcolor{red}{\item [\roll] #1}%

        %% see https://tex.stackexchange.com/a/59342/22492

        %% -----------1--------------
        % \begin{mdframed}[hidealllines=true,backgroundcolor=blue!20,innerleftmargin=3pt,innerrightmargin=3pt]%,leftmargin=-20pt,rightmargin=-3pt,skipbelow=10pt,skipabove=10pt
        %   \item [\roll] #1%
        % \end{mdframed}

        %% -----------2--------------
        \begin{shaded}
            \item [\roll] #1%
        \end{shaded}

        %% -----------3--------------
        % \noindent\adjustbox{bgcolor=blue!20,minipage=[t]{\linewidth}}{\item [\roll] #1}
    \else  
        \item [\roll] #1%
    \fi
}

\begin{document}

\begin{labeling}{\textbf{roll}}
\item [\textbf{roll}] \textbf{item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\AltItem {Item}
\end{labeling}

\end{document}

enter image description here

Pouya
  • 7,269
  • Thank you! I will accept this answer if I can figure out how to adjust the boxes... – raevol Aug 25 '18 at 05:43
  • @raevol, yeah that needs some work. Give a shot at solution marked by a comment line ------1------. That has several options that could you with. – Pouya Aug 25 '18 at 07:15
  • I updated my question with my progress. I've got it to a reasonable solution, but there's pretty large gaps between the items... is there a way to reduce that? – raevol Aug 26 '18 at 22:27