
Esta pregunta condujo a un nuevo paquete:
comment_io
Me gustaría crear un documento utilizando entornos enumerados que luego podría activar y desactivar antes de compilar.
Por ejemplo, digamos que tengo una sección que se parece a esta:
\begin{enumerate}
\item This is a test.
\item This is another test.
\item This is yet another test.
\end{enumerate}
En circunstancias normales, esto se compilaría como una lista enumerada con tres elementos, así:
1. This is a test.
2. This is another test.
3. This is yet another test.
Me gustaría encontrar una forma de que este entorno de enumeración específico desaparezca para que el resultado compilado se vea así:
This is a test. This is another test. This is yet another test.
Además, me gustaría poder hacer esto globalmente para diferentes entornos (es decir, no tener que editar cada instancia del entorno en cuestión a nivel local).
Sin embargo, aún me gustaría poder tener otros entornos de enumeración en mis documentos que permanecieran quietos (incluso si estuvieran anidados dentro del entorno que desaparece).
Contexto: Me gustaría escribir mis textos usando el estilo Tractatus de colocar cada sección en una jerarquía enumerada. Sin embargo, también me gustaría poder eliminar esta enumeración y mostrar el texto como un artículo normal. Finalmente, en este artículo regular, me gustaría tener la capacidad de mostrar listas enumeradas (que luego no serían parte de la enumeración del Tractatus).
Respuesta1
Para permitir que enumerate
los entornos anidados (u otras listas) sigan funcionando, debe capturar \item
si va a convertirlo en no operativo dentro de este nuevo on-off enumerate
. Para esto almacenamos su definición en el preámbulo y la restauramos para usarla al comienzo de cada enuemrate
uso.etoolbox
's \AtBeginEnvironment
. Si planea anidar también otras listas, deberá restaurarlas \item
de manera similar.
A continuación definí enumerate*
cuál se desactiva durante la compilación, aunque aún admita enumerate
mensajes anidados:
\documentclass{article}
\usepackage{etoolbox}
\AtBeginEnvironment{enumerate}{\let\item\olditem}
\let\olditem\item
\newenvironment{enumerate*}
{\par\let\item\relax}
{\par}
\begin{document}
\begin{enumerate*}
\item Something
\begin{enumerate}
\item Something else
\item Another thing
\begin{enumerate*}
\item This is it
\item This is another it
\end{enumerate*}
\end{enumerate}
\item Last thing
\end{enumerate*}
\end{document}
enumerate*
redefinido \item
para no hacer nada (ser \relax
). Como tal, ignorará por completo cualquier argumento opcional, si tiene alguno. Es decir, \item[<stuff>]
por defecto será [<stuff>]
. Eso se puede ajustar para engullir el argumento opcional, si es necesario.
También se puede ajustar el ajuste vertical insertado por enumerate*
.
Respuesta2
Gracias por todas tus respuestas. Sin embargo, al final, después de haberme esforzado por intentar que todos los diferentes métodos funcionaran, simplemente decidí escribir mi propio script en Python que comenta (y descomenta) líneas dependiendo de ciertos comandos que se incluyen en el archivo.
Entonces, por ejemplo, si mi archivo original se ve así:
\begin{document}
\begin{enumerate}
\item
This is a test.
\item
This is another test.
\item
This is yet another test.
\end{enumerate}
\end{document}
y quiero tener la opción de desactivar todas estas cosas de enumeración, simplemente agrego un pequeño comando al final de cada línea que me gustaría poder comentar, así:
\begin{document}
\begin{enumerate} %@
\item %@
This is a test.
\item %@
This is another test.
\item %@
This is yet another test.
\end{enumerate} %@
\end{document}
y dejo que mi script haga su magia, lo que convierte el archivo en algo parecido a esto:
\begin{document}
%@ \begin{enumerate}
%@ \item
This is a test.
%@ \item
This is another test.
%@ \item
This is yet another test.
%@ \end{enumerate}
\end{document}
Esto puede parecer engorroso, pero para mí es la mejor solución, ya que sé todo lo que está pasando.
Si alguien quiere usar o echar un vistazo al programa, que está escrito en Python, puede encontrarlo enCTAN.
Respuesta3
Defina un nuevo entorno con enumitem
acc. a sus necesidades:
\documentclass{article}
\usepackage{enumitem}
\newlist{myenum}{enumerate*}{3}
\setlist[myenum]{leftmargin=!,label=\arabic*.}
\begin{document}
\begin{myenum}
\item This is a test.
\item This is another test.
\item This is yet another test.
\begin{myenum}[label=]
\item Second level This is a test.
\item This is another test.
\item This is yet another test.
\begin{myenum}[label=\roman*.]
\item Third level This is a test.
\item This is another test.
\item This is yet another test.
\end{myenum}
\end{myenum}
\end{myenum}
\end{document}
Respuesta4
Esto casi hace el trabajo en su caso de uso. Puede que no sea robusto con entornos u opciones de enumeración más sofisticados; no se ocupa del anidamiento como usted desea.
\documentclass{article}
\usepackage{etoolbox}
\newtoggle{killenumerate}
\toggletrue{killenumerate}
\newenvironment{myenumerate}
{\iftoggle{killenumerate}
{\renewcommand{\item}{}}
{\begin{enumerate}}
}
{\iftoggle{killenumerate}
{}
{\end{enumerate}}
}
\begin{document}
Enumeration switched off selectively in preamble.
\begin{myenumerate}
\item One item in myenumerate environment
\item Two
\item Three
\end{myenumerate}
\begin{enumerate}
\item One item in ordinary enumerate
\item Two
\item Three
\end{enumerate}
Enumeration switched on for the rest of the document.
\togglefalse{killenumerate}
\begin{myenumerate}
\item One item in myenumerate environment
\item
\item Two
\item Three
\end{myenumerate}
\end{document}