filecontents* 환경 내의 매크로/명령은 확장되지 않습니다.

filecontents* 환경 내의 매크로/명령은 확장되지 않습니다.

나는 다음에 관해 당신의 도움을 구하고 싶습니다.

다음 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"가 "some text and math here $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내용을 그대로 읽으면 \commandzcommand거의 동일합니다.

몇 가지 변경을 통해 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

\ifthenelseMWE3은 텍스트로 "단순히 확장"되지 않기 때문에 (적어도 합리적인 노력으로는) 불가능합니다 .

관련 정보