我想就以下問題尋求您的協助。
考慮以下 MWE1:
\documentclass{article}
\usepackage{filecontents}
\begin{document}
Hi
\begin{filecontents*}{dummy.tex}
some text and math here $A=s^2$
\end{filecontents*}
\end{document}
效果很好。建立一個外部文件“dummy.tex”,其內容為“此處的一些文字和數學 $A=s^2$”。
現在,考慮以下 MWE2:
\documentclass{article}
\usepackage{filecontents}
\newcommand*{\somecommand}{some text and math here $A=s^2$}%
\begin{document}
Hi
\begin{filecontents*}{dummy.tex}
\somecommand
\end{filecontents*}
\end{document}
也會建立一個外部文件“dummy.tex”,但內容為“\somecommand”。我想要的是文件包含“這裡的一些文字和數學 $A=s^2$”。
現在,考慮以下 MWE3:
\documentclass{article}
\usepackage{ifthen}
\usepackage{filecontents}
\newcommand*{\somecommandA}{some text and math here $A=s^2$}%
\newcommand*{\somecommandB}{5}%
\begin{document}
Hi
\begin{filecontents*}{dummy.tex}
\somecommandA
\\
\ifthenelse{\equal{\somecommandB}{5}}{5}{4}
\end{filecontents*}
\end{document}
也創建了一個外部文件“dummy.tex”,但其內容
\somecommandA
\\
\ifthenelse{\equal{\somecommandB}{5}}{5}{4}
我想要的是文件包含
some text and math here $A=s^2$
5
有沒有一種方法可以將命令和巨集放入環境中filecontents*
,並使外部檔案包含擴展的命令和巨集? (我理解filecontents*
行為就像逐字一樣。)如果沒有filecontents*
,是否有另一個套件/環境可以實現此目的?
懇請您的幫忙。謝謝。
答案1
當你診斷自己時,filecontents
逐字閱讀內容,因此\command
和zcommand
幾乎相同。
透過一些更改,可以更改它以使 MWE2 工作,因為\somecommand
它是一個擴展為文字的簡單巨集。例如,這裡有一個\filecontentsspecials<esc><bgroup><egroup>
宏,它使下一個filecontents
環境使用該字元<esc>
作為轉義字元(通常是\
)、<bgroup>
開始<egroup>
群組字元和結束群組字元(通常分別是{
和}
)。重要的: \filecontentsspecials\\\{\}
將要不是工作。所選字元不能是 中的任何一個\\\{\}
。|[]
,例如有效。
使用後\filecontentsspecials
,下一個(並且只有下一個)filecontents
將對其內容進行填充擴展,並擴展巨集。事物不是要擴展的內容應以 為前綴|noexpand
或包含在|unexpanded[...]
.這是代碼:
\def\filecontentsspecials#1#2#3{
\global\let\ltxspecials\dospecials
\gdef\dospecials{\ltxspecials
\catcode`#1=0
\catcode`#2=1
\catcode`#3=2
\global\let\dospecials\ltxspecials
}
}
\documentclass{article}
\newcommand*{\somecommand}{some text and math here $A=s^2$}%
\begin{document}
Hi
\filecontentsspecials|[]
\begin{filecontents*}[overwrite]{dummy.tex}
|somecommand % this expands
\somecommand % this does not
\end{filecontents*}
\end{document}
該文件將包含:
some text and math here $A=s^2$ % this expands
\somecommand % this does not
MWE3 是不可能的(至少需要付出合理的努力),因為\ifthenelse
它不能「簡單地擴展到」文本。