Spezieller Theorem-Befehl

Spezieller Theorem-Befehl

Mein Ziel bei den letzten Fragen war es, einen sehr flexiblen Befehl zu definieren, der die Definition von Theoremen verschiedener Art ermöglicht. Der Grund dafür war, grundsätzlich einen einzigen Befehl für alle Arten von Theoremen zu haben, sowohl bereits verwendete als auch noch nie zuvor verwendete, um sowohl das Definieren vieler Arten von Theoremen zu vermeiden, darunter auch einige, die ich einmal in meinem Leben und nie wieder verwenden würde, als auch das Setzen des Namens eines speziellen Theorems in Klammern als [name=foo], was (foo) ergibt. Ein weiterer nützlicher Aspekt dieses Befehls, so wie ich ihn definiert habe, ist, dass er Flexibilität bei der Zähleranzeige ermöglicht, indem Theoreme der gleichen „Art“ (d. h. Theoreme, Definitionen usw.) je nach Unterteilung der Position des Theorems manchmal als [section], manchmal als [subsection], manchmal als nummeriert werden können, wodurch Nullen in vermieden werden, wo es keine Unterteilung in Unterabschnitte gibt, und um es manchmal als definieren zu müssen, wenn ich es gerne als definiert hätte, weil es eine solche Unterteilung GIBT. Im Moment sieht der Befehl wie im folgenden Minimalcode aus: [chapter][subsection][section][subsection]

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

welche Schriftsätze auf:

der obige Code wurde gesetzt

Meine Probleme sind:

1) Wenn ich verwende thmtools, erhalte ich einen Fehler undefined control sequence: \thmt@thmname->\theorem@attr(oder ähnliches), aber ohne es sind, wie im obigen Code, die Klammern um den Namen nicht fett und der Name muss fett sein, während mit thmtoolsbeides automatisch fett dargestellt würde; gibt es eine Möglichkeit, die Fettschrift ohne zu erhalten thmtoolsoder den Fehler zu beheben thmtools? Und wenn der Fehler von thmtoolsnicht behoben werden kann, gibt es eine Möglichkeit, ein \listoftheoremsohne dieses Paket zu erstellen?

2) Die Verwendung von \ifzum Vergleichen der Argumente verursacht Probleme, wenn das Argument eine Zeichenfolge ist. Ich möchte eine Fehlermeldung senden, wenn das Argument eine Zeichenfolge und kein einzelnes Zeichen ist, sodass ich, wenn meine Hand auf der Tastatur abrutscht und ich statt c z. B. cv eingebe, eine Fehlermeldung erhalte und das korrigieren kann. Wie mache ich das? NB: Das war die Hälfte der Frage beihttps://tex.stackexchange.com/questions/167513/special-conditionals-tex.

3) Ein Theorem mit Zähler, aber ohne Beschriftung (Esercizio Imperiano im gesetzten Code) weist einen ziemlich hässlichen Zwischenraum zwischen Zähler und Punkt auf. Wie entferne ich diesen? Oder wie entferne ich den Punkt, wenn möglich? Und warum scheint der Zwischenraum zwischen Theoremname und Zählern sowie zwischen Zählern und Punkt je nach Anzahl der Zähler unterschiedlich lang zu sein?

Aktualisieren: Wie in einem Kommentar erwähnt, ist Problem eins gelöst. Die Lösung macht aus dem Punkt allerdings einen noch schlimmer aussehenden Doppelpunkt und erzeugt das Problem von Klammern um die Namen in der Liste der Theoreme. Wie löse ich diese? Derselbe Satz von Theoremen plus etwas, das im ersten Satz eingegeben wurde, mit dem folgenden Code:

\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

erzeugt:

Theoreme Liste der Theoreme

Antwort1

Problem 1 hat eine Lösung beiTheoremstil mit Namen als Argument, und beachten Sie, dass [headpunct=]der Punkt/Doppelpunkt/was auch immer nach dem Theoremnamen entfernt werden sollte.

Problem 2 hat eine Antwort in \str_if_eq:nnTFeinem Kommentar unterProblem mit der Abkürzung von `\multirow` und `\multicolumn` (LaTeX).

Was das Abstandsproblem in Problem 3 betrifft, scheint es mit der Lösung von Problem 1 einfach verschwunden zu sein, was ein Segen ist.

Das einzige Problem ist, dass neben einer Möglichkeit, auszuwählen, welche Theoreme angezeigt und welche ignoriert werden sollen \listoftheorems, was leicht gelöst werden kann, indem der Befehl mit einem anderen Namen dupliziert wird oder tatsächlich ein weiteres Argument hinzugefügt wird, um zu entscheiden, welche Art von mystyleTheorem verwendet werden soll, \listoftheoremsKlammern um die Namen der Theoreme angezeigt werden und natürlich die Zähler in der Mitte des Namens stehen. Ich frage mich, ob es möglich ist, die Klammern zu entfernen (großes Problem) und in diesem Durcheinander eine andere Bezeichnung für die Liste zu definieren (kleines Problem). Tatsächlich hat das „kleine Problem“ eine einfache Lösung: Verwenden Sie einfach [{name=[<list name>]<page name>}](passenderweise in der komplexen thmattrUmgebung implementiert), obwohl ich das, wenn ich darüber nachdenke, vielleicht nicht möchte.

In jedem Fall dient diese Antwort zwei Zwecken:
1) Zusammenfassung der Lösung, die ich aus mehreren Fragen und Kommentaren und einer einsamen Recherche zu einem klaren Punkt auf der Seite dieser Frage erhalten habe, und
2) Verlinkung zu der neuen Frage, die die verbleibenden Probleme lösen wird (oder könnte), und zwarAnpassen der Liste der Theoreme

verwandte Informationen