
Esta questão levou a um novo pacote:
comment_io
Gostaria de criar um documento usando enumerar ambientes que eu pudesse ativar e desativar antes de compilar.
Por exemplo, digamos que eu tenha uma seção parecida com esta:
\begin{enumerate}
\item This is a test.
\item This is another test.
\item This is yet another test.
\end{enumerate}
Isso seria, em circunstâncias normais, compilado como uma lista enumerada com três itens, assim:
1. This is a test.
2. This is another test.
3. This is yet another test.
Eu gostaria que esse ambiente de enumeração específico desaparecesse para que a saída compilada fosse mais ou menos assim:
This is a test. This is another test. This is yet another test.
Além disso, gostaria de poder fazer isso globalmente para diferentes ambientes (ou seja, não precisar editar cada instância do ambiente em questão em nível local).
No entanto, eu ainda gostaria de poder ter outros ambientes enumerados em meus documentos que permanecessem inalterados (mesmo que estivessem aninhados no ambiente desaparecido).
Contexto: Gostaria de escrever meus textos usando o estilo Tractatus de colocar cada seção em uma hierarquia enumerada. No entanto, também gostaria de poder remover esta enumeração e mostrar apenas o texto como um artigo normal. Finalmente, neste artigo regular, eu gostaria de poder mostrar listas enumeradas (que então não fariam parte da enumeração do Tractatus).
Responder1
Para permitir que enumerate
ambientes aninhados (ou outras listas) ainda funcionem, você precisa capturar \item
se pretende torná-lo autônomo dentro deste novo on-off enumerate
. Para isso armazenamos sua definição no preâmbulo e a restauramos para uso no início de cada enuemrate
utilizaçãoetoolbox
é \AtBeginEnvironment
. Se você planeja aninhar outras listas também, será necessário restaurar \item
de maneira semelhante.
Abaixo eu defini enumerate*
o que está desativado durante a compilação, embora ainda suporte aninhados enumerate
:
\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 não fazer nada (ser \relax
). Como tal, ignorará completamente qualquer argumento opcional, se houver algum. Ou seja, \item[<stuff>]
o padrão será [<stuff>]
. Isso pode ser ajustado para engolir o argumento opcional, se necessário.
Também é possível ajustar o ajuste vertical inserido por enumerate*
.
Responder2
Obrigado por todas as suas respostas. No entanto, no final, depois de ter arrancado todo o meu cabelo tentando fazer com que todos os diferentes métodos funcionassem, simplesmente resolvi escrever meu próprio script em Python que comenta (e descomenta) linhas dependendo de certos comandos incluídos em o arquivo.
Então, por exemplo, se meu arquivo original for assim:
\begin{document}
\begin{enumerate}
\item
This is a test.
\item
This is another test.
\item
This is yet another test.
\end{enumerate}
\end{document}
e eu quero a opção de desativar todas essas coisas enumeradas, simplesmente adiciono um pequeno comando no final de cada linha que gostaria de poder comentar, assim:
\begin{document}
\begin{enumerate} %@
\item %@
This is a test.
\item %@
This is another test.
\item %@
This is yet another test.
\end{enumerate} %@
\end{document}
e deixe meu script fazer sua mágica, o que transforma o arquivo em algo parecido com isto:
\begin{document}
%@ \begin{enumerate}
%@ \item
This is a test.
%@ \item
This is another test.
%@ \item
This is yet another test.
%@ \end{enumerate}
\end{document}
Isso pode parecer complicado, mas para mim é a melhor solução, pois sei tudo o que está acontecendo.
Se alguém quiser usar ou dar uma olhada no programa, que é escrito em Python, ele pode ser encontrado emCTAN.
Responder3
Defina um novo ambiente com enumitem
acc. às suas necessidades:
\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}
Responder4
Isso quase funciona no seu caso de uso. Pode não ser robusto com ambientes ou opções de enumeração mais sofisticados - ele não lida com o aninhamento como você deseja.
\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}