\write18 编码

\write18 编码

我写了一个bash脚本osmimage测试来源),它下载通过地址指定的地图。我想编写一个使用 调用此脚本的包\write18,但存在一些问题。

以下示例适用于lualatex

\documentclass{article}
%\usepackage[latin1]{inputenc}
%\usepackage[T1]{fontenc}
\usepackage{graphicx}
\def\loc{Bergheimer Straße 110A, 69115 Heidelberg, Germany}
%\def\loc{Rathausmarkt 1, 20095 Hamburg, Deutschland}
\newcommand*\getmap%
{%
  %\immediate\write18{osmimage -l "\loc"}
  \immediate\write18{osmimage -l "\unexpanded\expandafter{\loc}"}
}%
\begin{document}
\section{Example}
Did you ever wanted to visit the Dante e.V. office? Here we go:

\getmap
\begin{center}
\includegraphics[width=10cm]{osmimage}
\end{center}
\end{document}

代码编辑pdflatex在 Ulrike 的评论之后。和其他编码仍然存在问题utf-8

地图上有 Dante eV 办公室

pdflatex如果我使用(使用inputenc和)运行此文件,fontenc地址传输将不再起作用。不使用inputenc或 ,fontenc我会在 URL 中得到各种奇怪的输出(参见日志)。

如果我使用仅 ASCII 地址(例如汉堡市政厅),它也可以起作用pdflatex

地图汉堡市政厅

因此,似乎存在脚本预期的某种编码问题,UTF-8或者可能是 url 编码。

有什么想法吗?将包裹限制为lualatex或者可能xelatex(尚未测试) utf-8编码

答案1

包裹stringenc可以将地址字符串从 转换latin1utf-8,需要osmimage

\documentclass{article}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{graphicx}
\usepackage{stringenc}
\def\loc{Bergheimer StraXe 110A, 69115 Heidelberg, Germany}
%\def\loc{Rathausmarkt 1, 20095 Hamburg, Deutschland}
\newcommand*\getmap{%
  \StringEncodingConvert{\locstring}{%
    \detokenize\expandafter{\loc}%
  }{latin1}{utf-8}%
  \StringEncodingSuccessFailure{% success
  }{% failure
    \errmessage{Converting to UTF-8 failed}%
  }%
  \immediate\write18{osmimage -l "\locstring"}
}%
\begin{document}
\section{Example}
Did you ever wanted to visit the Dante e.V. office? Here we go:

\getmap
\begin{center}
\includegraphics[width=10cm]{osmimage}
\end{center}
\end{document}

结果

相关内容