![Comando de teorema especial](https://rvso.com/image/286987/Comando%20de%20teorema%20especial.png)
Mi objetivo en las últimas preguntas era definir un comando muy flexible que permitiera la definición de teoremas de varios tipos. La razón de esto era tener un comando único básicamente para todo tipo de teoremas, tanto los ya usados como los nunca antes usados, para evitar que ambos tuvieran que definir muchos tipos de teoremas, incluidos algunos que usaría una vez en mi vida y nunca más. y tener que poner entre paréntesis el nombre de un teorema especial como [name=foo]
, que da como resultado (foo). Otra cosa útil de este comando tal como lo he definido es que permite flexibilidad en la visualización del contador, permitiendo que los teoremas del mismo "tipo" (es decir, teoremas, definiciones, etc.) se numeren a veces como [section]
, a veces como [subsection]
, a veces. como [chapter]
, dependiendo de la subdivisión de la ubicación del teorema, evitando así ceros [subsection]
donde no hay división de subsección, y tener que definirlo como [section]
cuando a veces me gustaría que se defina como [subsection]
porque EXISTE tal subdivisión. Por el momento el comando es como en el código mínimo a continuación:
\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}
que tipografía:
Mis problemas son:
1) Si uso thmtools
, aparece un error undefined control sequence: \thmt@thmname->\theorem@attr
(o algo similar), pero sin él, como en el código anterior, los corchetes alrededor del nombre no están en negrita y el nombre está obligado a estar en negrita, mientras que con thmtools
obtendría ambos automáticamente en negrita; ¿Hay alguna manera de poner la negrita sin thmtools
o solucionar el error thmtools
? Y si el error thmtools
no se puede resolver, ¿hay alguna manera de crear un paquete \listoftheorems
sin ese paquete?
2) Usar \if
para comparar los argumentos causa problemas cuando el argumento es una cadena; Me gustaría enviar un mensaje de error si el argumento es una cadena en lugar de un solo carácter, de modo que si mi mano se desliza sobre el teclado y en lugar de c escribo, por ejemplo, cv, obtengo un error y lo corrijo; ¿Cómo puedo hacer eso? NB, esa era la mitad de la pregunta enhttps://tex.stackexchange.com/questions/167513/special-conditionals-tex.
3) Un teorema con contador pero sin etiqueta (Esercizio Imperiano en el código tipográfico) tiene un espacio bastante feo entre el contador y el punto; ¿Cómo elimino eso? Alternativamente, ¿cómo elimino el punto, si es posible? ¿Y por qué el espacio entre el nombre del teorema y los contadores, así como el espacio entre los contadores y el punto, parece variar en longitud dependiendo del número de contadores?
Actualizar: Como se menciona en un comentario, el problema uno está resuelto. La solución, sin embargo, convierte el punto en dos puntos aún peores y crea el problema de los corchetes alrededor de los nombres en la Lista de Teoremas. ¿Cómo los soluciono? El mismo conjunto de teoremas, más algo escrito en el primero, con el siguiente 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
produce:
Respuesta1
El problema 1 tiene solución enEstilo de teorema con nombre como argumento., teniendo en cuenta que se debe utilizar [headpunct=]
para eliminar el punto/dos puntos/lo que sea después del nombre del teorema.
El problema 2 tiene una respuesta en el\str_if_eq:nnTF
un comentario enProblema con la abreviatura de `\multirow` y `\multicolumn` (LaTeX).
En cuanto al problema de espaciado en el problema 3, parece haber desaparecido simplemente con la solución del problema 1, lo cual es una bendición.
El único problema es que, además de una forma de elegir qué teoremas mostrar e ignorar en el archivo \listoftheorems
, que se puede resolver fácilmente duplicando el comando con otro nombre o, de hecho, agregando otro argumento para decidir qué tipo de mystyle
teorema usar, el \listoftheorems
programa muestra paréntesis alrededor de los nombres de los teoremas y, por supuesto, tiene los contadores en el medio del nombre. Me pregunto si es posible eliminar los corchetes (problema mayor) y definir una etiqueta diferente para la lista en este lío (problema menor). De hecho, el "problema menor" tiene una solución fácil: simplemente usarlo [{name=[<list name>]<page name>}]
(implementado oportunamente en el thmattr
entorno complejo), aunque pensándolo bien, es posible que no quiera eso.
En cualquier caso, esta respuesta tiene dos propósitos:
1) Resumir la solución que obtuve de varias preguntas y comentarios e investigación solitaria en un punto claro de la página de esta pregunta, y
2) Vincular a la nueva pregunta que (o puede) resolver las cuestiones restantes, que está enPersonalización de la lista de teoremas