Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2832

pandocとsedでlatex原稿をwordに変換する

$
0
0
はじめに latexのファイルは、microsoft Wordよりも流通が良くない。また、Wordは履歴や文章校正の機能などが高機能である。そのため、英文校正に出したかったり、共著者とWordの履歴機能を使いたかったり、そもそもlatexを使わない共著者がいたりすると、latexの原稿をWordに変えたいときがある。ここでは、pandocを使って、latex 原稿をWordファイルに変換にする方法を検討する。 ここで、特に気にしている点などを述べると、 pandocを利用すると、図のラベルを\label{fig:ex1}として、\ref{fig:ex1}と本文で利用した時に、\ref{fig:ex1}は番号に置き換わらず、[fig:ex1]という名前のハイパーリンクになる。これをFigure 1 にしたい。この事情は、表や数式でも同様である。 \left< \right>などは使えない。\left\langなどを利用する必要がある。 これらの点などをsedなどを利用し適当に解決しながら、それらしいアウトプットを作るスクリプトを作成した。 スクリプトとコメントなど 作ったスクリプト (wsl2のubuntuで動かしています。) #/bin/bash if [ ! $# -eq 1 ] ; then echo "need input file name" exit -1 fi input=$1 sed -e '/^%/d' \ -e "s/\\\notag//g" \ -e "s/citenum/cite/g" \ -e "s/Fig.~//g" \ -e "s/Figs.~//g" \ -e "s/Figure~//g" \ -e "s/Figures~//g" \ -e "s/Eq.~//g" \ -e "s/Eqs.~//g" \ -e "s/Table~//g" \ -e "s/Tables~//g" \ -e "s/pdf/png/g" \ -e "s/left</left\\\langle/g" \ -e "s/right>/right\\\rangle/g" \ -e "s/left </left\\\langle/g" \ -e "s/right >/right\\\rangle/g" \ -e "s/{table\*}/{table}/g" \ -e "s/{figure\*}/{figure}/g" \ $input > tmp.tex grep "\\label{fig" $input | grep -e "{fig:[0-z]*}" -o |uniq > figlst.txt grep "\\label{table" $input | grep -e "{table:[0-z]*}" -o |uniq > tbllst.txt grep "\\label{eq:" $input | grep -e "{eq:[0-z]*}" -o |uniq > eqlist.txt countF=0 for each in `cat figlst.txt ` ; do countF=$((countF+1)) sed -i -e "s/$each/{Figure $countF}/" tmp.tex done countT=0 for each in `cat tbllst.txt ` ; do countT=$((countT+1)) sed -i -e "s/$each/{Table $countT}/" tmp.tex done countEq=0 for each in `cat eqlist.txt ` ; do countEq=$((countEq+1)) sed -i -e "s/$each/{Eq. $countEq}/" tmp.tex done cp tmp.tex tmp2.tex for each in `seq 1 ${countF}` ; do string='s/\(\\caption{\)\(.*\) \\label{Figure '"${each}"'}/\1Figure '"${each}: "'\2/g' sed -i -e "$string" tmp2.tex done for each in `seq 1 ${countT}` ; do string='s/\(\\caption{\)\(.*\) \\label{Table '"${each}"'}/\1Table '"${each}: "'\2/g' sed -i -e "$string" tmp2.tex done for each in `seq 1 ${countEq}` ; do string='s/label{Eq. '"${each}"'}/text{ (Eq. '"${each}"')}/' sed -i -e "$string" tmp2.tex done pandoc.exe -s tmp2.tex -o tmp3.md #--citeproc --bibliography=citation.bib #--csl=jacs.csl sed -i -e 's/\\\[//' -e 's/\\\]//' tmp3.md pandoc.exe -s tmp3.md -o output.docx #--citeproc --bibliography=citation.bib #--reference-doc=my_styles2.docx --csl=physical-review-letters.csl exit 実行例をしめす。 もとの、texfileとして \RequirePackage{plautopatch} \documentclass[12pt,dvipdfmx]{jarticle} \usepackage{amsmath} \usepackage{graphicx} \usepackage{bm} \title{ {\LaTeX} test} \author{tnagai-github} \date{\today} \begin{document} \maketitle \section{はじめに} \subsection{数式のテスト} \begin{align} \bm{f} = m\bm{a} \label{eq:Newton} \end{align} \begin{align} \frac{1}{2}mv^2 + U = \text{constant} \label{eq:ConsLow} \end{align} Eq.~\ref{eq:Newton}とEq.~\ref{eq:ConsLow}を書いた。 \subsection{図のテスト} フリー素材は、ぱくたそやいらすとやから(Figures~\ref{fig:pakutaso} and \ref{fig:illustoya}) \begin{figure} \includegraphics[width=0.5\textwidth]{001.png} \caption{``Uno'' \label{fig:pakutaso}} \end{figure} \begin{figure} \includegraphics[width=0.5\textwidth]{002.png} \caption{Darwin \label{fig:illustoya}} \end{figure} \end{document} に対して、実行すると、 といった感じで、それなりの雰囲気で数式も図の番号も出る。 (図の幅に関する命令は無視されちゃうんだなぁ。。。) 細かい調整は必要かもしれないが、校正に出したり、共著者に呼んで貰う分には十分なクオリティであろう。 改善の余地 元々は英語原稿向けのスクリプトとして作ったので、日本語用には少し書き換える必要があるだろう(今の実装だと、図のキャプションで日本語は多分使えない。) 正規表現は余り凝って書いていない。\label{fig:xxx}は、captionの一番最後になければならず、また、captionの途中で改行は許されない。 図は、\label{fig:xxx}、表は、\label{table:xxx}、式は、\label{eq:xxx}の形しか許されない。章番号には対応していない。 また、行中の途中のカラムからのコメントアウトは考慮できていないように思う。 Figures 1 and 2 は、Figure 1 and Figure 2と変換されてしまう。大抵は前者のスタイルが、ほぼ義務的に、好まれると思う。 その他 参考文献はbibtexの形式で利用できる。 pandocに-citeproc --bibliography=citation.bibをオプションで渡せば良い。また、投稿先に合わせてスタイルも変更できる。1 また、--reference-doc で渡すdocxファイルを適切に編集することで、フォントや形式などを制御することができる。2  - https://qiita.com/ishigaki/items/aed5872fe24f732d021a ↩ https://niszet.hatenablog.com/entry/2020/01/03/080000;  ↩

Viewing all articles
Browse latest Browse all 2832

Latest Images

Trending Articles