이 명령의 구문을 설명하는 도움말

이 명령의 구문을 설명하는 도움말

일부 내부 카운터를 따르는 대신 수동으로 번호 매기기를 실행할 수 있는 정리 환경을 정의하고 싶습니다. 둘러보다가 발견한이것답변. 거기에서 그들은 다음 코드를 솔루션으로 제안합니다.

\newtheorem{innercustomthm}{Theorem}
\newenvironment{customthm}[1]
  {\renewcommand\theinnercustomthm{#1}\innercustomthm}
  {\endinnercustomthm}

코드는 내가 원하는 대로 작동하지만 코드를 약간 수정하고 싶고(또한 내 문서에 무엇을 넣는지 알아보고 싶고) 약간 막히는 경우를 대비해 코드의 모든 내용을 이해하려고 노력했습니다.

우선 \newenvironment의 구조는 다음과 같습니다.

\newenvironment{<env-name>}[<n-args>][<default>]{<begin-code>}{<end-code>}

나는 세 번째 인수가 비어 있다는 것을 이해합니다. 그건 문제 없어요. 그런 다음 다음과 같은 구조를 갖는 \renewcommand가 옵니다.

\renewcommand{<cmd>}[<n-args>][<default>]{<text>}

여기서는 중괄호가 사용되지 않기 때문에 무슨 일이 일어나고 있는지 따라가는 데 어려움이 있습니다. 명령을 통해 생략할 수 있다고 생각했지만 이에 대한 정보를 찾지 못했습니다. 그리고 그 후에는 \theinnercustomthm, \innercustomthm 및 \endinnercustomthm 명령이 이 특정 솔루션을 위해 맞춤 제작된 것처럼 나타나서 어떻게 작동하는지 알 수 없기 때문에 더욱 혼란스러워집니다.

예를 들어, 제가 알아차린 한 가지는 환경 이름을 변경하면(customthm 대신에 mytheo라고 함) 코드가 손상된다는 것입니다.

누군가 무슨 일이 일어나고 있는지 설명할 수 있거나 어떤 매뉴얼이나 웹페이지를 알려줄 수 있다면 내가 무슨 일이 일어나고 있는지 이해할 수 있다면 진심으로 감사하겠습니다.

답변1

가장 먼저 주목해야 할 점은

\newtheorem{innercustomthm}{Theorem}

내부적으로 다음과 유사한 작업을 수행합니다.

\newenvironment{innercustomthm}[1][]{<begin>}{<end>}

여기서 <begin><end>코드는 문제가 되지 않습니다. 환경에서는 선택적 인수(정리 참고 사항 또는 속성)를 찾습니다. 또한 환경과 동일한 이름을 가진 카운터를 설정합니다.

선택한 이름은 길고 의도적으로 매력적이지 않습니다. 이러한 이름이 기존 또는 상상된 환경과 충돌할 가능성은 거의 없습니다.

우리가 염두에 두고 있는 응용 프로그램의 경우 카운터가 실제로 필요하지는 않지만 오히려 호출이 innercustomthm카운터를 단계적으로 진행하고 다음 \label명령이 카운터의 값을 사용하도록 필요한 것을 설정한다는 사실입니다. 그러나 LaTeX는 값 자체를 보지 않고, \the<counter>이 경우에는 의 현재 의미를 사용합니다 \theinnercustomthm. 의 의미는 \theinnercustomthm환경에 번호를 매길 때도 사용됩니다.

우리의 아이디어는 정리에 수동으로 번호를 매기는 것입니다. 왜냐하면 다른 출판물에 있는 것과 동일한 번호로 정리를 인용해야 하기 때문에 자동 번호 매기기는 불가능하기 때문입니다. 글쎄, 우리는 innercustomthm명령문에 원하는 숫자를 인수로 취하는 래퍼를 구성합니다 .

\theinnercustomthm따라서 아이디어는 명령문을 조판하는 작업을 수행할 "내부" 환경을 (로컬에서) 재정의하고 호출하는 데 사용될 인수를 취하는 환경을 시작하는 것입니다 .

customthm아마도 의 정의는 다음과 같습니다.

\newenvironment{customthm}[1]
  {\renewcommand{\theinnercustomthm}{#1}\begin{innercustomthm}}
  {\end{innercustomthm}}

하지만 여기에는 작은 단점이 있습니다. 을 잊어버리면 대신 "Missing " \end{customthm}이라는 오류가 표시됩니다 . 그래서,\endinnercustomthmcustomthm마초 프로그래머이 경우 "내부" 환경에 대한 \begin\end루틴의 내부 버전을 사용하십시오. 장부는 이미 수행되었으므로 \begin{customthm}반복할 필요가 없습니다. 그래서 우리는 얻는다

\newenvironment{customthm}[1]
  {\renewcommand{\theinnercustomthm}{#1}\innercustomthm}
  {\endinnercustomthm}

음, 인용한 실제 코드는 다음과 같습니다.

\newenvironment{customthm}[1]
  {\renewcommand\theinnercustomthm{#1}\innercustomthm}
  {\endinnercustomthm}

중괄호가 누락된 이유는 무엇입니까? 또 다른 (나쁜) 습관마초 프로그래머그 교정기가 불필요하고 어차피 제거될 것이라는 것을 아는 사람.

의심스러운 경우에는 이를 사용하십시오.

답변2

먼저, 실제로 무엇을 하는지 물어봐야 합니다 \newvironment{myenv}{..start code...}{...end code...}. 약간 단순화하면 \newenvironment두 개의 명령을 정의하고 \myenv\endmyenv\myenv확장되고 ...start code...\endmyenv확장되는 일이 발생합니다 ...end code.... LaTeX를 작성할 때 \begin{myenv}...\end{myenv}이 환경을 {\myenv ... \endmyend}. (뒤에서 조금 더 많은 일이 발생합니다.)

다음으로, 이 줄은 카운터를 사용하는 "정리" 환경으로 환경을 \newtheorem{innercustomthm}{Theorem}정의합니다 . 특히, 이 환경에 대한 "정리 수"는 를 사용하여 인쇄됩니다 .innercustomthminnercustomthm\theinnercustomthm

이제 다음을 고려해 보겠습니다.

\newenvironment{customthm}[1]
  {\renewcommand\theinnercustomthm{#1}\innercustomthm}
  {\endinnercustomthm}

이는 customthm하나의 인수를 취하는 환경을 정의합니다 #1. 위의 첫 번째 단락에서는 다음 \begin{customthm}[X]...\end{customthm}과 같이 확장됩니다.

{\renewcommand\theinnercustomthm{X}\innercustomthm ... \endinnercustomthm}

즉, 환경이 적용된 이후 \theinnercustomthm와 동일하도록 재정의됩니다 . 따라서 환경은 먼저 와 동일하게 설정된다는 점을 제외하면 기본적으로 환경과 동일합니다 . 여기서 는 환경 에 대한 인수입니다 . 따라서 최종 효과는 이 환경이 "정리 X"를 인쇄한다는 것입니다.Xinnercustomthmcustomthminnercustomthm\theinnercustomthmXXcustomthm

마지막으로 말씀하셨죠환경 이름을 변경하면(대신 mytheo) customthm코드가 손상됩니다.. 내가 말한 것이 옳다면 이것은 사실일 수 없습니다! 실제로 다음 코드에서 볼 수 있듯이 환경 이름을 변경하면 코드는 정확히 동일한 방식으로 작동합니다.

\documentclass{article}

\newtheorem{innercustomthm}{Theorem}
\newenvironment{mytheo}[1]
  {\renewcommand\theinnercustomthm{#1}\innercustomthm}
  {\endinnercustomthm}

\begin{document}

  \begin{innercustomthm}Hi
  \end{innercustomthm}

  \begin{mytheo}Hi
  \end{mytheo}

\end{document}

관련 정보