
Deseo producir varias secciones, cada una seguida de varias líneas i. Así es como lo hice usando multido para repetir un comando personalizado \drawline i veces.
\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}
Lo que produce esto:
El problema que tengo parece estar relacionado con la línea de ruptura \\
que sigue a la definición de tikzpicture. Necesito dividir líneas entre llamadas de \drawline para que las líneas aparezcan en secuencia y no una al lado de la otra. Sin embargo, tengo dos problemas:
- Recibo una línea vacía adicional innecesaria después de la última llamada de \drawline, lo que significa espacio adicional entre secciones.
- Cuando las líneas de una sección llenan una página más o menos perfectamente, la siguiente sección aparece en la página siguiente, pero no en la parte superior de la página. Hay un espacio en blanco entre la parte superior de la página y el título de la sección.
La sintaxis para multido es esta según la documentación:
\multido{*variables*}{*repetitions*}{*stuff*}
¿Hay alguna manera de hacer referencia?repeticionescomo variable? Por ejemplo, si uno quisiera que el salto de línea se aplicara a todos los n donde n <repeticiones? En ese caso, se podría utilizar un condicional para romper la línea en todos los casos excepto en el último.
¿O se pueden usar coordenadas en tikzpicture en relación con otra tikzpicture? De esta manera se podría definir \drawline sin recurrir al \\
final.
Respuesta1
No es necesario utilizarlo multido
cuando tikz
está cargado. Solo usa \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}
Respuesta2
Un método bastante general para repetir cosas un número determinado de veces, utilizando también el índice correspondiente.
\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}
El primer argumento \REPEAT
es el número de repeticiones; el segundo argumento es el código a ejecutar, donde podemos hacer referencia al índice mediante ##1
.
En el caso particular que desee , \REPEAT
la \drawline
macro establece el índice actual en un cuadro de ancho cero que sobresale hacia la derecha y luego dibuja una regla con el ancho completo del texto, 2 puntos por debajo de la línea base y con un grosor de 0,2 puntos.
Respuesta3
No es necesario utilizar TikZ para esto, también puedes usar el integrado de LaTeX \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}
Respuesta4
Una versión de LaTeX3 que usa \rule
(según la respuesta 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}