ファントムとetoolbox iftoggle

ファントムとetoolbox iftoggle

文書の一部を条件付きで「ファントム」にする方法はありますか (同じ「ファントム」テキストを 2 回入力せずに)?

現在、私は 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 が長い場合、非常に長いテキスト セグメントが 2 つあることに注意してください。これは、.tex ファイルが長くなり、ディスク サイズが大きくなるため望ましくありません。long_text を 2 回入力しなくても、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

関連情報