
Desejo produzir uma série de seções, cada uma seguida por um número de linhas i. Foi assim que fiz usando multido para repetir um comando personalizado drawline i vezes.
\documentclass[12pt]{memoir}
\usepackage{tikz}
\usepackage{multido}
\newcommand{\drawline}{%
\begin{tikzpicture}%
\draw [gray] (0,0) -- (\textwidth, 0);%
\node [above right] at (0,0) {\i.};
\end{tikzpicture}%
\\%
}
\begin{document}
\section*{Section 1}
\multido{\i=1+1}{5}{\drawline}
\section*{Section 2}
\multido{\i=1+1}{4}{\drawline}
\end{document}
O que produz isso:
O problema que estou tendo parece estar relacionado à linha de interrupção \\
que segue a definição do tikzpicture. Preciso quebrar linhas entre chamadas de \drawline para que as linhas apareçam em sequência e não uma ao lado da outra. No entanto, tenho dois problemas:
- Recebo uma linha vazia extra desnecessária após a última chamada de \drawline, significando espaço extra entre as seções.
- Quando as linhas de uma seção preenchem uma página mais ou menos perfeitamente, a próxima seção aparece na página seguinte, mas não no topo da página. Há um espaço em branco entre o topo da página e o título da seção.
A sintaxe para multido é esta de acordo com a documentação:
\multido{*variables*}{*repetitions*}{*stuff*}
Existe uma maneira de referênciarepetiçõescomo uma variável? Por exemplo, se alguém quiser que a quebra de linha se aplique a todos n onde n <repetições? Nesse caso, uma condicional poderia ser usada para quebrar a linha em todos os casos, exceto no último.
Ou é possível usar coordenadas no tikzpicture em relação a outro tikzpicture? Desta forma \drawline poderia ser definido sem recorrer ao \\
final.
Responder1
Não é necessário usar multido
quando tikz
estiver carregado. Apenas use \foreach
:
\documentclass[12pt]{memoir}
\usepackage{tikz}
\newcommand{\linespace}{6mm}
\newcommand{\drawlines}[1]{\tikz{\foreach \n in {1,...,#1}
{\draw[gray](0,-\n*\linespace)node[above right,black]{\n.}--(\textwidth,-\n*\linespace);}}}
\begin{document}
\section*{Section 1}
\drawlines{5}
\section*{Section 2}
\drawlines{4}
\end{document}
Responder2
Um método bastante geral para repetir coisas um determinado número de vezes, usando também o índice correspondente.
\documentclass[12pt]{memoir}
\ExplSyntaxOn
\NewDocumentCommand{\REPEAT}{mm}
{% #1 = number of lines to print, #2 = what to repeat
\int_step_inline:nn { #1 } { #2 }
}
\ExplSyntaxOff
\newcommand{\drawline}[1]{%
\noindent\makebox[0pt][l]{#1.}%
\leaders\hrule height -2pt depth 2.2pt \hfill
\hspace*{0pt}\par
}
\newcommand{\drawlines}[1]{\REPEAT{#1}{\drawline{##1}}}
\begin{document}
\section{Title}
\drawlines{5}
\section{Title}
\drawlines{4}
\end{document}
O primeiro argumento \REPEAT
é o número de repetições; o segundo argumento é o código a ser executado, onde podemos nos referir ao índice por ##1
.
No caso particular você deseja \REPEAT
a \drawline
macro, que define o índice atual em uma caixa de largura zero saliente para a direita e então desenha uma regra com largura total do texto, 2pt abaixo da linha de base e com espessura de 0,2pt.
Responder3
Não é necessário usar TikZ para isso, você também pode usar o LaTeX integrado \rule
:
\documentclass[12pt]{memoir}
\usepackage{xcolor}
\makeatletter
\newcommand\drawline[1]
{\expandafter\drawline@\expandafter1\expandafter;\the\numexpr#1;}
\def\drawline@#1;#2;%
{%
\ifnum#1>#2
\expandafter\@gobbletwo
\fi
\@firstofone
{%
\drawline@output{#1}%
\expandafter\drawline@\the\numexpr#1+1;#2;%
}%
}
\newcommand\drawline@output[1]
{%
\par
\noindent\rlap{#1.}%
\textcolor{gray}{\rule[-0.3333em]{\linewidth}{.4pt}}%
\par
}
\makeatother
\begin{document}
\section*{Section 1}
\drawline{5}
\section*{Section 2}
\drawline{4}
\end{document}
Responder4
Uma versão LaTeX3 usando \rule
(com base na resposta de Skillmon)
\documentclass{article}
\usepackage{xcolor}
\ExplSyntaxOn
\int_new:N \g_dl_line_count
\NewDocumentCommand{\drawlines}{ m }{
\int_set:Nn \g_dl_line_count {1}
\prg_replicate:nn {#1} {%
\par
\noindent\rlap{\int_use:N \g_dl_line_count.}%
\textcolor{gray}{\rule[-0.3333em]{\linewidth}{.4pt}}%
\par
\int_incr:N \g_dl_line_count
}
}
\ExplSyntaxOff
\begin{document}
\section*{Section 1}
\drawlines{5}
\section*{Section 2}
\drawlines{4}
\end{document}