![특수 정리 명령](https://rvso.com/image/286987/%ED%8A%B9%EC%88%98%20%EC%A0%95%EB%A6%AC%20%EB%AA%85%EB%A0%B9.png)
마지막 몇 가지 질문에서 나의 목표는 다양한 종류의 정리를 정의할 수 있는 매우 유연한 명령을 정의하는 것이었습니다. 그 이유는 기본적으로 이미 사용되었거나 이전에 사용되지 않은 모든 종류의 정리에 대해 단일 명령을 갖고, 두 가지 모두 내 인생에서 한 번 사용하고 다시는 사용하지 않을 일부 정리를 포함하여 많은 종류의 정리를 정의해야 하는 것을 피하기 위한 것이었습니다. 그리고 특별한 정리의 이름을 괄호 안에 와 같이 넣어야 하며 [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) 해결될(또는 해결할 수 있는) 새로운 질문에 연결합니다. 나머지 문제는정리 목록 사용자 정의