LaTeX에서 변수를 정의 할 수있는 방법이 있습니까?


349

LaTeX에서 컴파일 된 PDF의 변수 대신 내용이 사용되는 문자열 변수를 어떻게 정의 할 수 있습니까?

소프트웨어에 기술 문서를 작성하고 있고 프리앰블 또는 다른 곳에서 패키지 이름을 정의하여 이름이 변경되면 많은 장소에서 패키지를 교체 할 필요가없고 한 곳에서만 바꾸고 싶다고 가정 해 봅시다. .


2
거대한 콘텐츠의 경우 \ savebox ( en.wikibooks.org/wiki/LaTeX/Boxes#savebox ) 를 언급 할 가치가 있습니다.
Immanuel Weihnachten

답변:


370

프리앰블에 다음을 추가하십시오.

\newcommand{\newCommandName}{text to insert}

그럼 당신은 \newCommandName{}텍스트에서 사용할 수 있습니다

에 대한 자세한 정보는 위키 책을\newcommand 참조하십시오.

예:

\documentclass{article}
\newcommand\x{30}
\begin{document}
\x
\end{document}

산출:

30

31
@DiAlex는 중괄호를 생략 할 때 삽입 된 텍스트 다음에 공백을 방해하므로주의하십시오. 이 질문을 참조하십시오 .
jtpereyda

ASCII가 아닌 문자에는 제대로 작동하지 않습니다. 어떤 아이디어?
lindhe

164

사용 \def명령 :

\def \variable {Something that's better to use as a variable}

\def경고없이 기존 매크로 를 재정의하므로 다양한 미묘한 오류가 발생할 수 있습니다. 하나이를 극복과 같은 네임 스페이스 변수를 사용 my_var하거나 다시 가을 \newcommand, \renewcommand대신 명령.


10
\def기존 매크로를 확인하지 않으므로 사용에 문제가있을 수 있습니다. LaTeX 지옥두 번째 원을 참조하십시오 – 따라서 사용하는 것이 좋습니다\newcommand
Ryan Atallah

2
감사합니다 @RyanAtallah는 그것에 대해 메모를 추가했습니다. 하지만 그 의미 variable가 변화하기 쉽다 는 의미는 아닙니까? :)
plaes

4
@plaes 당신 말이 맞지만 그렇다고해서 사용하고 싶지는 않습니다 \def. 대신, 사용하려는 모든 변수를 "초기화"하고 \newcommand(있는 경우에도) 모범 사례를 \@empty작성하여를 사용하여 변수를 수정하는 것이 가장 \renewcommand좋습니다. \newcommand오류가 발생하거나 적어도 경고가 발생 하기 때문에 변수가 이미 종료되었는지 알려줍니다 .
Nick2253

4
\def수학 모드에서는 작동 하지만 작동 \newCommandName하지 않습니다. (예, \def\mathExpression{\pi^2 + \sin x})
Jollywatt

35

변수의 거리를 설명하기위한, 사용할 것이다 \newlength(그리고하여 값을 조작 \setlength, \addlength, \settoheight, \settolength\settodepth).

마찬가지로 \newcounter문서 전체에서 증가해야하는 섹션 및 그림 번호와 같은 항목에 액세스 할 수 있습니다 . 나는 과거에 이것을 사용하여 다른 그림과 별개로 번호가 매겨진 코드 샘플을 제공했습니다 ...

또한 \makebox나중에 다시 사용하기 위해 (그리고 \settolength... 와 함께 사용하기 위해) 약간의 배치 된 문서를 저장할 수 있습니다 .


25
등의 간단한 사용 예 \newlength{\hcolw}와는 \setlength{\hcolw}{0.47\textwidth}유용 할 것이다.
trybik


1

나는 당신이 아마도이 목적을 위해 토큰 목록을 사용하고 싶다고 생각합니다 : 토큰 목록 \newtoks\packagename 을 설정 하여 이름을 할당하십시오 : \packagename={New Name for the package} 이름을 출력에 넣으십시오 : \the\packagename.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.