Comando de teorema especial

Comando de teorema especial

Meu objetivo nas últimas questões foi definir um comando muito flexível que permitisse a definição de teoremas de vários tipos. A razão para isso foi ter um único comando basicamente para todos os tipos de teoremas, ambos já usados ​​e nunca usados ​​antes, para evitar que ambos tivessem que definir muitos tipos de teoremas, incluindo alguns que eu usaria uma vez na vida e nunca mais, e ter que colocar o nome de um teorema especial entre colchetes como [name=foo], que resulta em (foo). Outra coisa útil sobre este comando da forma como o defini é que ele permite flexibilidade na exibição do contador, permitindo que teoremas do mesmo "tipo" (ou seja, Teoremas, Definições, etc.) sejam numerados às vezes como [section], às vezes como [subsection], às vezes as [chapter], dependendo da subdivisão da localização do teorema, evitando assim zeros [subsection]onde não há divisão de subseção, e ter que defini-lo como [section]quando às vezes eu gostaria que fosse definido como [subsection]porque EXISTE tal subdivisão. No momento o comando está como no código mínimo abaixo:

\documentclass[a4paper]{report}
\usepackage{amsmath,amssymb,amsfonts,xparse,amsthm,mathptmx}
\makeatletter
\newtheorem*{@thmattr}{\theorem@attr}
\NewDocumentEnvironment{thmattr}{moO{x}oo}
{\IfNoValueTF{#2}
      {\def\theorem@attr{#1}}
      {\@ifundefined{c@#2}
            {\newcounter{#2} \setcounter{#2}{1}}
            {\addtocounter{#2}{+1}}
      \def\counters{\if #3c
            \arabic{chapter}.\arabic{#2}
            \else{
                  \if #3s
                  \arabic{chapter}.\arabic{section}.\arabic{#2}
                  \else{
                        \if#3x
                        \arabic{chapter}.\arabic{section}.\arabic{subsection}.\arabic{#2}
                        \else
                        \errmessage{Illegal argument in counter definition}
                        \errhelp{The third argument must be either c, s or x, for chapter, section and subsection respectively}
                        \fi}
                  \fi}
            \fi}\def\theorem@attr{#1\ \counters}}
\IfNoValueTF{#4}
      {\begin{@thmattr}}
      {\IfNoValueTF{#5}
            {\begin{@thmattr}[\textbf{#4}]}
            {\begin{@thmattr}[\textbf{#4}\label{#5}]}}}
{\end{@thmattr}}
\makeatother

\begin{document}
\begin{thmattr}{Teorema della Palla Pelosa}
\end{thmattr}
\begin{thmattr}{Teorema}[teor][x]
\end{thmattr}
\begin{thmattr}{Esercizio Imperiano}[eseese][c]
\end{thmattr}
\begin{thmattr}{Definizione}[defi][s][Estensione algebrica][thm:defi:EstAlg]
\end{thmattr}
\begin{thmattr}{Sorrata}[mu][c][Estensione algebrica]
\end{thmattr}
\end{document}

quais composições para:

o código acima digitado

Meus problemas são:

1) Se eu usar thmtools, recebo um erro undefined control sequence: \thmt@thmname->\theorem@attr(ou algo parecido), mas sem ele, como no código acima, os colchetes ao redor do nome não ficam em negrito e o nome é forçado a ficar em negrito, enquanto com thmtoolseu ficaria ambos automaticamente em negrito; tem como tirar o negrito sem thmtoolsou resolver o erro thmtoolsdá? E se o erro thmtoolsnão puder ser resolvido, existe uma maneira de fazer \listoftheoremssem esse pacote?

2) Usar \ifpara comparar os argumentos causa problemas quando o argumento é uma string; Gostaria de enviar uma mensagem de erro se o argumento for uma string em vez de um único caractere, de modo que se minha mão escorregar no teclado e em vez de c eu digitar, por exemplo, cv, recebo um erro e corrijo isso; como faço isso? NB, isso foi metade da pergunta emhttps://tex.stackexchange.com/questions/167513/special-conditionals-tex.

3) Um teorema com contador mas sem rótulo (Esercizio Imperiano no código tipográfico) tem um espaço bastante feio entre o contador e o ponto; como faço para remover isso? Como alternativa, como removo o ponto, se possível? E por que o espaço entre o nome do teorema e os contadores, bem como entre os contadores e o ponto, parece variar em comprimento dependendo do número de contadores?

Atualizar: Conforme mencionado em um comentário, o problema um está resolvido. A solução, entretanto, transforma o ponto em dois pontos de aparência ainda pior e cria o problema dos colchetes ao redor dos nomes na Lista de Teoremas. Como faço para resolver isso? O mesmo conjunto de teoremas, mais algo digitado no primeiro, com o seguinte código:

\makeatletter
\declaretheoremstyle[
spaceabove=\topsep, spacebelow=\topsep,
headfont=\normalfont\bfseries,
notefont=\bfseries, notebraces={}{},
bodyfont=\normalfont\itshape,
postheadspace=0.5em,
name={\ignorespaces},
numbered=no,
headpunct=:]
{mystyle}
\declaretheorem[style=mystyle]{@thmattr}
\NewDocumentEnvironment{thmattr}{moO{x}oo}
{\IfNoValueTF{#2}
      {\def\theorem@attr{#1}}
      {\@ifundefined{c@#2}
            {\newcounter{#2} \setcounter{#2}{1}}
            {\addtocounter{#2}{+1}}
      \def\counters{\if #3c
            \arabic{chapter}.\arabic{#2}
            \else{
                  \if #3s
                  \arabic{chapter}.\arabic{section}.\arabic{#2}
                  \else{
                        \if#3x
                        \arabic{chapter}.\arabic{section}.\arabic{subsection}.\arabic{#2}
                        \else
                        \errmessage{Illegal argument in counter definition}
                        \errhelp{The third argument must be either c, s or x, for chapter, section and subsection respectively}
                        \fi}
                  \fi}
            \fi}\def\theorem@attr{#1\counters}}
\IfNoValueTF{#4}
      {\begin{@thmattr}[\theorem@attr]}
      {\IfNoValueTF{#5}
            {\begin{@thmattr}[\theorem@attr (#4)]}
            {\begin{@thmattr}[\theorem@attr (#4)\label{#5}]}}}
{\end{@thmattr}}
\renewcommand\thmt@listnumwidth{-1.5em}
\makeatother

produz:

Teoremas Lista de Teoremas

Responder1

O problema 1 tem solução emEstilo de teorema com nome como argumento, observando que deve-se usar [headpunct=]para remover o ponto/dois pontos/qualquer coisa após o nome do teorema.

O problema 2 tem uma resposta em \str_if_eq:nnTFum comentário emProblema com abreviatura de `\multirow` e `\multicolumn` (LaTeX).

Quanto ao problema de espaçamento no problema 3, parece ter simplesmente desaparecido com a solução do problema 1, o que é uma felicidade.

O único problema é que, além de uma forma de escolher quais teoremas mostrar e ignorar no \listoftheorems, o que pode ser facilmente resolvido duplicando o comando com outro nome, ou de fato adicionando outro argumento para decidir que tipo de mystyleteorema usar, o \listoftheoremsmostra colchetes ao redor dos nomes dos teoremas e, claro, tem os contadores no meio do nome. Gostaria de saber se é possível retirar os colchetes (problema maior) e definir um rótulo diferente para a lista nessa bagunça (problema menor). Na verdade, o "problema menor" tem uma solução fácil: basta usar [{name=[<list name>]<page name>}](implementado oportunamente no thmattrambiente complexo), embora pensando nisso eu talvez não queira isso.

De qualquer forma, esta resposta serve para dois propósitos:
1) Resumir a solução que obtive a partir de várias perguntas e comentários e de uma única pesquisa em um ponto claro da página desta pergunta, e
2) Link para a nova questão que irá (ou pode) resolver as questões restantes, que está emPersonalizando lista de teoremas

informação relacionada