文書の一部を条件付きで「ファントム」にする方法はありますか (同じ「ファントム」テキストを 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