用于转换 Windows/DOS 路径的包或宏

用于转换 Windows/DOS 路径的包或宏

如果要包含图形,我必须手动将反斜杠“\”替换为斜杠“/”,这不是很方便,尤其是在路径很长的情况下。但 Latex 就是为了方便和自动化,对吧?

所以我想知道是否有一个宏/包可以接受 Windows 路径并将反斜杠替换为斜杠并返回它,最好可以处理路径中的 sdspace。预期用途包括这样的图形和列表

\includegraphics{"\windowspath{my path1\my path2\my image.png}"}
\lstinputlisting{"\windowspath{my path1\my path2\myscript.m}"}

我发现了一些东西这里类似但它似乎将转换后的路径定义为一个新变量,而不是返回它。

答案1

listofitems包可以转换反斜杠并保留空格(即使它们紧跟在\! 后面)。但是,名称本身不能位于组内,如 OP 的示例所示。

然而,将此演示转换为可用的宏仍然需要一些工作。

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{listofitems,lmodern}
\begin{document}
{
\catcode`?=0 %
?catcode`\\=12 %
?setsepchar{\}
?greadlist?nameA{"\windowspath\my path1\ my path2\my image.png"}
?greadlist?nameB{"\windowspath\my path1\my path2\myscript.m}
}
\foreachitem\i\in\nameA{\ifnum\icnt=1\else/\fi\detokenize\expandafter{\i}}

\foreachitem\i\in\nameB{\ifnum\icnt=1\else/\fi\detokenize\expandafter{\i}}
\end{document}

在此处输入图片描述

答案2

最简单的方法可能只是在本地定义生成文件路径所需的任何宏

\documentclass{article}
\usepackage{graphicx}
\begin{document}


zzz

\clearpage

{\def\c{/c}\def\tmp{/tmp}\def\my{/my" "}\def\picture{/picture}

\typeout{test:}
\includegraphics{\c\tmp\my pics\picture.png}

}


\end{document}

输入文件\c\tmp\my pics\picture.png,如日志所示:

...
[2 </c/tmp/my pics/picture.png>] (./file.aux) )

   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

(see the transcript file for additional information)</usr/local/texlive/2017/te
xmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb>
Output written on file.pdf (2 pages, 75385 bytes).
Transcript written on file5.log.

答案3

中的一种稍微简单的实现可能如下。但请注意,它不是完全可扩展的,因此在以下情况expl3下不起作用:\input

\documentclass[]{article}

\usepackage{expl3}

\ExplSyntaxOn
\newcommand*{\windowspath}[1]{
  \str_set:Nn \l_tmpa_str { #1 }
  \regex_replace_all:nnN { \\ } { / } \l_tmpa_str
  \str_use:N \l_tmpa_str}
\ExplSyntaxOff

\begin{document}
\windowspath{\fo o.tex}

%\input{\windowspath{\f o}}
\end{document}

相关内容