팬텀 및 etoolbox iftoggle

팬텀 및 etoolbox iftoggle

내 문서의 일부를 조건부로 '유령'하는 방법이 있습니까(동일한 '유령' 텍스트를 두 번 입력하지 않고)?

현재 나는 문서의 일부를 선택적으로 확장하기 위해 etoolbox 패키지, newtoggle/settoggle 및 iftoggle을 사용하고 있습니다.

\usepackage{etoolbox}
\begin{document}
\newtoggle{flag_name}
\settoggle{flag_name}{true}
\iftoggle{flag_name}{\phantom{long_text}}{long_text}
\end{document}

long_text가 길면 두 개의 매우 긴 텍스트 세그먼트가 있는데, 이는 디스크 크기에 비해 .tex 파일이 더 길어지고 커지기 때문에 바람직하지 않습니다. 나는 long_text를 두 번 입력하지 않고도 long_text를 '가짜'로 만드는 것이 가능한지 여부에 대해 고민했습니다.

나는 이와 같은 작업을 시도하고 있지만 LaTeX에서 중괄호 문자가 최종 문서의 일부인 중괄호 문자가 아닌 .tex 파일의 일부임을 인식하는 데 어려움을 겪고 있습니다.

\usepackage{etoolbox}
\begin{document}
\newtoggle{flag_name}
\settoggle{flag_name}{true}
\iftoggle{flag_name}
{
\phantom{}\{
}
{}
long_text
\iftoggle{flag_name}
{
\}
}
{}
\end{document}

논리적으로 나는 플래그가 true일 때마다 long_text 주위에 가상 중괄호를 가져오려고 노력하고 있습니다. 따라서 long_text는 항상 출력되지만 플래그의 진실 여부에 따라 팬텀이 그 주위에 나타납니다.

감사해요.

답변1

\phantom또는 \relax아무 작업 도 수행하지 않는 적절한 매크로를 삽입할 수 있습니다 .

여기에 이미지 설명을 입력하세요

\documentclass{article}
\usepackage{etoolbox}% http://ctan.org/pkg/etoolbox
\begin{document}
\newtoggle{flag_name}
\settoggle{flag_name}{true}
\iftoggle{flag_name}{\phantom}{\relax}{long text} short text \par
\settoggle{flag_name}{false}
\iftoggle{flag_name}{\phantom}{\relax}{long text} short text
\end{document}

이것이 작동하는 이유는 무엇입니까? \phantom어떠한 인수도 취하지 않기 때문입니다 . 이는 마술이 일어나기 전의 "중간" 기능이므로 토글은 입력 스트림에 올바른 매크로를 삽입하기만 하면 됩니다. 텍스트를 중괄호로 지정했는지 확인하세요.~ 후에당신의 \iftoggle.

Joseph Wright의 의견: \relax여기를 사용하면 중괄호 세트가 남게 되어 수학 모드의 간격에 영향을 미칠 수 있습니다. \newcommand{\firtofone}[1]{#1}그것을 정의하고 사용하는 것(또는 \makeatletter을 사용하는 것 ) 이 더 안전할 것입니다 \@firstofone.

관련 정보