最后调用的编译器是
ps2pdf -dAutoRotatePages#/None frames.ps
对于 Windows 或
ps2pdf -dAutoRotatePages=/None frames.ps
对于非 Windows。
我想要调用的代码片段如下。
\foreach \compiler/\ext in {latex/tex,dvips/dvi,ps2pdf -dAutoRotatePages#/None/ps}
{\immediate\write18{\compiler\space frames.\ext}}
但如果你需要完整的代码,请参阅我的最后一个答案这里。
迭代器可能会与用作分隔符的 相混淆。如何/None
转义?/
/None
答案1
您不仅想逃避/None
,而且#
在这种情况下这也是违法的:
\edef\hms{\string#/}% Hash Mark Slash
\foreach \compiler/\ext in {latex/tex,dvips/dvi,ps2pdf -dAutoRotatePages\hms None/ps}
{\immediate\write18{\compiler\space frames.\ext}}
您在聊天中提到的变体甚至更好:
\edef\AutoRotateOff{-dAutoRotatePages\string#/None}
\foreach \compiler/\ext in {latex/tex,dvips/dvi,ps2pdf \AutoRotateOff/ps}
{\immediate\write18{\compiler\space frames.\ext}}
\write
两者都利用了充分扩展其论点的事实。
另一个变体:
\makeatletter
\foreach \compiler/\ext in {latex/tex,dvips/dvi,%
\@firstofone{ps2pdf -dAutoRotatePages\string#/None}/ps}
{\immediate\write18{\compiler\space frames.\ext}}
\makeatother
答案2
根据@egreg 的回答,/
可以从中删除,\hms
但我们需要{...}
如下ps2pdf
项目。
\edef\hms{\string#}
\foreach \compiler/\ext in {latex/tex,dvips/dvi,{ps2pdf -dAutoRotatePages\hms/None}/ps}{\immediate\write18{\compiler\space temporary.\ext}}
平均能量损失
% this input file name is filename.tex
% compile it with pdflatex -shell-escape filename.tex
\documentclass[preview,border=12pt]{standalone}
\usepackage{filecontents}
\begin{filecontents*}{temporary.tex}
\documentclass[pstricks,border=12pt]{standalone}
\begin{document}
\begin{pspicture}(4,2)
\rput{90}(2,1){Marienplatz}
\end{pspicture}
\end{document}
\end{filecontents*}
\usepackage{graphicx,pgffor}
\edef\hms{\string#}
\foreach \compiler/\ext in {latex/tex,dvips/dvi,{ps2pdf -dAutoRotatePages\hms/None}/ps}{\immediate\write18{\compiler\space temporary.\ext}}
\begin{document}
\includegraphics{temporary}
\end{document}
有关 Windows 的更多信息
根据我使用 Windows 7 的经验,-dAutoRotatePages=/None
和都-dAutoRotatePages#/None
可以在 Windows 上运行。因此,最简单的解决方案只需要{...}
如下。
% this input file name is filename.tex
% compile it with pdflatex -shell-escape filename.tex
\documentclass[preview,border=12pt]{standalone}
\usepackage{filecontents}
\begin{filecontents*}{temporary.tex}
\documentclass[pstricks,border=12pt]{standalone}
\begin{document}
\begin{pspicture}(4,2)
\rput{90}(2,1){Marienplatz}
\end{pspicture}
\end{document}
\end{filecontents*}
\usepackage{graphicx,pgffor}
\foreach \compiler/\ext in {latex/tex,dvips/dvi,{ps2pdf -dAutoRotatePages=/None}/ps}{\immediate\write18{\compiler\space temporary.\ext}}
\begin{document}
\includegraphics{temporary}
\end{document}
警告
不要替换\string#
为,\#
因为这样\#
做不起作用(我刚刚尝试过)。
答案3
编辑(2017):因为xint 1.1 (2014/10/28)
这里需要\usepackage{xinttools}
,而不是\usepackage{xint}
。
由于 \xintForpair
不使用,/
因此可以使用更简单的语法:
% this input file name is filename.tex
% compile it with pdflatex -shell-escape filename.tex
\documentclass[preview,border=12pt]{standalone}
\usepackage{filecontents}
\begin{filecontents*}{temporary.tex}
\documentclass[pstricks,border=12pt]{standalone}
\begin{document}
\begin{pspicture}(4,2)
\rput{90}(2,1){Marienplatz}
\end{pspicture}
\end{document}
\end{filecontents*}
\usepackage{graphicx}
\usepackage{xinttools}
\xintForpair #1#2 in
{(latex,tex),(dvips,dvi),(ps2pdf -dAutoRotatePages\string#/None,ps)}
\do {\immediate\write18{#1 temporary.#2}}
\begin{document}
\includegraphics{temporary}
\end{document}
最新版本信特透明地删除逗号分隔列表中的空格,因此上面的内容可能包含您想要的逗号和括号周围的所有额外空格。