Crie um ambiente de enumeração que possa ser desativado

Crie um ambiente de enumeração que possa ser desativado

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 enumerateambientes aninhados (ou outras listas) ainda funcionem, você precisa capturar \itemse 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 enuemrateutilizaçãoetoolboxé \AtBeginEnvironment. Se você planeja aninhar outras listas também, será necessário restaurar \itemde maneira semelhante.

Abaixo eu defini enumerate*o que está desativado durante a compilação, embora ainda suporte aninhados enumerate:

insira a descrição da imagem aqui

\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 \itempara 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 enumitemacc. à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.

insira a descrição da imagem aqui

\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}

informação relacionada