特殊定理コマンド

特殊定理コマンド

最後の数問の私の目的は、さまざまな種類の定理を定義できる非常に柔軟なコマンドを定義することでした。その理由は、すでに使用されている定理とこれまで使用されたことのない定理の両方を含む、基本的にすべての種類の定理に対して単一のコマンドを用意することで、人生で一度しか使用しない定理を含む多くの種類の定理を定義しなければならないことと、[name=foo](foo) を生成する のように特別な定理の名前を括弧で囲まなければならないことの両方を回避するためです。私が定義したこのコマンドのもう 1 つの便利な点は、カウンターの表示に柔軟性を持たせることができることです。定理の場所の細分化に応じて、同じ「種類」の定理 (つまり、定理、定義など) に、時には[section][subsection]時にはと番号を付けることが[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}

どのタイプセットにするか:

上記のコードはタイプセットされています

私の問題は次のとおりです:

1) を使用するとthmtools、エラーundefined control sequence: \thmt@thmname->\theorem@attr(または同様のエラー) が発生しますが、 を使用しない場合、上記のコードのように、名前を囲む括弧は太字にならず、名前は強制的に太字になります。一方、 を使用すると、thmtools両方とも自動的に太字になります。 または を使用せずに太字にして、 が示すthmtoolsエラーを解決する方法はありますかthmtools? のエラーを解決できない場合、そのパッケージを使用せずにthmtoolsを作成する方法はありますか?\listoftheorems

2)\if引数を比較するために を使用すると、引数が文字列の場合に問題が発生します。引数が単一の文字ではなく文字列の場合にエラーメッセージを送信し、キーボードで手が滑って c の代わりに cv と入力した場合にエラーが発生して修正できるようにしたいのですが、どうすればいいですか? これは質問の半分でした。https://tex.stackexchange.com/questions/167513/special-conditionals-tex

3) カウンターはあるがラベルがない定理 (タイプセットされたコードでは Esercizio Imperiano) では、カウンターとドットの間にかなり醜いスペースがあります。これを削除するにはどうすればよいですか? または、可能であれば、ドットを削除するにはどうすればよいですか? また、定理名とカウンターの間、およびカウンターとドットの間のスペースの長さがカウンターの数によって異なるように見えるのはなぜですか?

アップデート: コメントで述べたように、問題 1 は解決されました。ただし、この解決方法ではドットがさらに見栄えの悪いコロンに変わり、定理一覧の名前を括弧で囲むという問題が発生します。これを解決するにはどうすればよいですか? 同じ定理のセットに、最初の定理に入力したものを加えて、次のコードを作成します。

\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

生成:

定理 定理の一覧

答え1

問題1の解答は次の通りです。名前を引数とする定理スタイル[headpunct=]ただし、定理名の後のドット/コロン/その他を削除するには を使用する必要があることに注意してください。

問題2の答えは\str_if_eq:nnTFコメントにあります`\multirow` と `\multicolumn` の省略に関する問題 (LaTeX)

問題 3 の間隔の問題については、問題 1 の解決とともに単純に消えてしまったようで、これは幸いでした。

唯一の問題は、 でどの定理を表示し、無視するかを選択する方法以外に\listoftheorems、コマンドを別の名前で複製するか、実際にmystyle使用する定理の種類を決定する別の引数を追加することで簡単に解決できますが、 では\listoftheorems定理の名前が括弧で囲まれ、もちろん名前の途中にカウンタがあります。この混乱の中で、括弧を削除して (大きな問題)、リストに別のラベルを定義することは可能でしょうか (小さな問題)。実際、「小さな問題」には簡単な解決策があります。単に を使用するだけです[{name=[<list name>]<page name>}](複雑なthmattr環境で適切に実装されています)。ただし、よく考えてみると、私はそれを望まないかもしれません。

いずれにせよ、この回答には2つの目的があります。1
) いくつかの質問やコメント、独自の調査から得た解決策をこの質問のページの1つの明確なポイントにまとめること、
2) 残りの問題を解決する(または解決する可能性がある)新しい質問へのリンクです。定理リストのカスタマイズ

関連情報