특수 정리 명령

특수 정리 명령

마지막 몇 가지 질문에서 나의 목표는 다양한 종류의 정리를 정의할 수 있는 매우 유연한 명령을 정의하는 것이었습니다. 그 이유는 기본적으로 이미 사용되었거나 이전에 사용되지 않은 모든 종류의 정리에 대해 단일 명령을 갖고, 두 가지 모두 내 인생에서 한 번 사용하고 다시는 사용하지 않을 일부 정리를 포함하여 많은 종류의 정리를 정의해야 하는 것을 피하기 위한 것이었습니다. 그리고 특별한 정리의 이름을 괄호 안에 와 같이 넣어야 하며 [name=foo], 이는 (foo)를 산출합니다. 내가 정의한 이 명령의 또 다른 유용한 점은 카운터 표시에 유연성을 허용하여 동일한 "종류"(예: 정리, 정의 등)의 정리를 때로는 [section], 때로는 [subsection], 때로는 번호로 매길 수 있다는 것입니다. as [chapter], 정리 위치의 세분화에 따라 [subsection]하위 섹션 구분이 없는 곳에서 0을 피하고 때로는 그러한 하위 구분이 있기 때문에 [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를 입력하면 오류가 발생하여 수정됩니다. 어떻게 해야 합니까? NB 그게 질문의 절반이었습니다.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

어쨌든 이 답변은 두 가지 목적으로 사용됩니다.
1) 여러 질문과 의견 및 고독한 연구에서 얻은 솔루션을 이 질문 페이지의 하나의 명확한 지점으로 요약하고
2) 해결될(또는 해결할 수 있는) 새로운 질문에 연결합니다. 나머지 문제는정리 목록 사용자 정의

관련 정보