ファイルパスに%が含まれる場合

ファイルパスに%が含まれる場合

- myu myo の投稿
返信数: 13
画像を参照してpdfファイルに埋め込みたいのですが
ファイルパスにスペースを入れてはならないことは知っていますが
%も入れることはできないのでしょうか?
\%とかにしてもうまくいかないのですが、
%がパス名に入ったものを扱うことは可能でしょうか?

myu myo への返信

Re: ファイルパスに%が含まれる場合

- Akira Kakuto の投稿
実験:
以下で %%%/pic.png を埋め込めました。

%
% pdflatex
%
\documentclass[12pt]{article}
\usepackage{graphicx}
\catcode`\%=12
\graphicspath{{%%%/}}
\catcode`\%=14
\begin{document}
\includegraphics{pic.png}
\end{document}
Akira Kakuto への返信

Re: ファイルパスに%が含まれる場合

- 匿 名 の投稿
同様に platex + dvipdfmx でも良いっぽい。

%
% platex
%
\documentclass{jsarticle}
\usepackage[dvipdfmx]{graphicx}
\begin{document}
\catcode`\%=12
\includegraphics[width=3cm]{pic%01.pdf}
\catcode`\%=14
\end{document}
Akira Kakuto への返信

Re: ファイルパスに%が含まれる場合

- myu myo の投稿
ありがとうございます。

texファイルと画像が同じフォルダーに入っている場合にはうまくいきました。

しかし
画像がサブフォルダーに入っている場合

{./%%%/yyy.png}

のように指定してもうまくいかないのですが
どうすれば良いでしょうか?
 
myu myo への返信

Re: ファイルパスに%が含まれる場合

- aminophen の投稿
% が含まれる部分を
\catcode`\%=12
\catcode`\%=14
ではさんでください。

\documentclass{jsarticle}
\usepackage[dvipdfmx]{graphicx}
\begin{document}
\catcode`\%=12
\includegraphics[width=3cm]{./%%%/pic%01.pdf}
\catcode`\%=14
\end{document}

は通るのではないでしょうか。
aminophen への返信

Re: ファイルパスに%が含まれる場合

- myu myo の投稿
すいません、質問文が間違えています
pdfファイルではなくpng画像ファイルです。


\documentclass{jsarticle}

\usepackage[dvipdfmx]{graphicx}

\begin{document}

\catcode`\%=12

\includegraphics[width=3cm]{pic%01.png}

\catcode`\%=14

\end{document}

を試して見ると以下のエラーが出てうまくいかないのですが

! LaTeX Error: File `pic%01.xbb' not found. Use -shell-escape option to generat
e automatically.

See the LaTeX manual or LaTeX Companion for explanation.
Type H for immediate help.
myu myo への返信

Re: ファイルパスに%が含まれる場合

- myu myo の投稿
ありがとうございます。

bbを指定したらうまくいきました。

ちなみに同様の方法を使って
スペースがパス名に含まれるものも扱うことができますか?
myu myo への返信

Re: ファイルパスに%が含まれる場合

- aminophen の投稿
スペースが含まれる場合は,マルチドットの場合と同様に grffile.sty を使うのが常套手段です。
しかし,extractbb を使用する platex + dvipdfmx では extractbb に引数を正しく渡せないのではないかと思います。
pdflatex や lualatex なら grffile パッケージを使うとよいでしょう。
myu myo への返信

Re: ファイルパスに%が含まれる場合

- aminophen の投稿
手元の TeX Live 2014 では

\documentclass{jsarticle}
\usepackage[dvipdfmx]{graphicx}
\begin{document}
\catcode`\%=12
\includegraphics[width=3cm]{./%%%/pic%1.png}
\catcode`\%=14
\end{document}

で埋め込みに成功します。
仮に myu myo さんが TeX Live 2013 以前をお使いであれば,うまくいかないのかもしれません。
TeX Live 2014 以降では .xbb ファイルを吐かずに画像情報を取得しますが,TeX Live 2013 以前では .xbb ファイルを吐いていたと記憶しています。
この .xbb を吐いてそれを読む仕組みでは上手く行っていないかもしれません。
aminophen への返信

Re: ファイルパスに%が含まれる場合

- myu myo の投稿
すいません。

bbを指定したらうまくいきました。




あと、できれば12とか14とかが何を表しているのかも教えていただきたいのですが

http://d.hatena.ne.jp/zrbabbler/20121008/1349677570

検索して調べてみたのですが
11とか12を入力しているページも見つかります。


ちなみに同様の方法を使って
スペースがパス名に含まれるものも扱うことができますか?
myu myo への返信

Re: ファイルパスに%が含まれる場合

- aminophen の投稿
12や14はカテゴリーコードと呼ばれるものです。こちらを参照。
aminophen への返信

Re: ファイルパスに%が含まれる場合

- myu myo の投稿
ありがとうございます。

つまり
\catcode`\%=12
で%をそのほか文字として読み込むようにしておいて
\catcode`\%=14
で元のコメント行に戻しているということでしょうか?

それだとスペースの場合にはどうしたら良いですか?

10番を使えば良いということは分かるのですが
myu myo への返信

Re: ファイルパスに%が含まれる場合

- aminophen の投稿
\catcode は TeX の命令で,LaTeX ユーザが安易に扱うべきものではないという認識です(学びたければ別ですが)。
% については簡単な方法が見当たらないので,とりあえず Kakuto さんや匿名さんのように \catcode を使う方法でしのぐしかありません。(少なくとも私は他の方法を知りません)

スペースについては grffile という LaTeX パッケージで対応できますので,これを使ったほうが楽です。ただし extractbb の自動実行による方法は失敗しますので,事前に

extractbb "pic 01.png"

を実行して pic 01.xbb というファイルを生成します。中身の bb 情報を読んで,以下のように明示的に指定します。

\documentclass{jsarticle}
\usepackage[dvipdfmx]{graphicx}
\usepackage[space]{grffile}
\begin{document}
\includegraphics[bb=0 0 310 220,width=3cm]{pic 01.png}
\end{document}

これなら通るのではないでしょうか。
# 上の bb は手元で試した適当な png ファイルの値ですので,実際は .xbb ファイルを読んで指定。