나는 다음에 관해 당신의 도움을 구하고 싶습니다.
다음 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
내용을 그대로 읽으면 \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
\ifthenelse
MWE3은 텍스트로 "단순히 확장"되지 않기 때문에 (적어도 합리적인 노력으로는) 불가능합니다 .