Phantom 和 etoolbox iftoggle

Phantom 和 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)。

相關內容