Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

review-jlreqを使った縦書きのPDFでgraph命令を使って作った図が時計回りに90°回転している #1749

Closed
huideyeren opened this issue Oct 5, 2021 · 2 comments

Comments

@huideyeren
Copy link
Contributor

review-jlreqを使った縦書きのPDFでgraph命令を使って作った図が時計回りに90°回転しています。

//graph[homura1][plantuml][悪魔ほむら分類図]{
@startmindmap
skinparam monochrome true
skinparam defaultFontName "Noto Sans CJK JP"
* 悪魔ほむら派閥
** 悪魔ほむらは正しいよ(ほむら肯定派)
*** まどかやさやかもなぎさも蘇って完璧な終幕だよ(ハッピーエンド派)
*** 本当はみんなと仲良くしたいのに関係を断ち切ったほむらは可哀想だよ(使い魔本音派)
*** 初めてほむらが本音を見せたから許してあげようよ(ほむら同情派)
*** まどかの願いはほむらの想いを無視してたよ(ほむらの願い尊重派)
*** 本編からしてこうなる事は自明だったよ(ほむら心情派)
** QBが悪いんだよ(QB絶対悪派)
*** あんな実験をしたから自業自得だよ(QBざまぁ派)
*** あのまま円環されたら後々まどかはQBのものになってたよ(悪魔妥当派)
*** QBに感情が生まれてまた逆襲してくるよ(続編待望派)
*** QBもいたぶられて喜んでるよ(ほむQ派)
** 悪魔ほむらは間違ってるよ(ほむら否定派)
*** 使い魔もいるしまどかは目覚めそうだし不安定な世界すぎるよ(バッドエンド派)
*** ほむら自身が幸せになってないよ(まどか視点派)
*** まどかの願いを否定してるよ(まどかの願い尊重派);
*** エゴだよそれは(アムロ派);
*** ほむらは気が狂ってるよ(ほむらヤンデレ派);
*** 唯一敵対しているさやかに倒して欲しいんだよ(さやほむ派);
** 悪魔ほむらは可愛いよ(悪魔崇拝派)
*** 全員救ったほむらは悪魔じゃなくて女神だよ(アルティメットほむら派);
*** 記憶改竄とか凄いよ最強だよ(悪魔万能説派);
*** 指先でつんつんされたいよ(QBちょっと変われ派);
*** 悪魔ぶってるほむらちゃん可愛いよ(私って悪魔ね派);
*** 毎回まどかを抱きしめたい口実を作りたかったんだよ(ほむまど派);
*** 悪魔になってもまどかの前ではヘタレなんだよ(まどほむ派);
** 愛よ(愛なら仕方ない派);
@endmindmap
//}

この部分ですと、縦書きPDFで以下のような表示になります。

当該図

なお、EPUBでは画像の向きはおかしいものの、サイズ調整がうまくいっていないようです。

その他のソースは以下のリポジトリをご覧ください。

現代焚書第3号

なお、上記リポジトリではGitHub Actionsで以下のようなPythonスクリプトを流しています。

import glob
from os import getcwd
from os.path import basename, join

import cairosvg
import PyPDF2


def rotate(file_path, angle):
    file = PyPDF2.PdfFileReader(open(file_path, 'rb'))
    file_output = PyPDF2.PdfFileWriter()
    for page_num in range(file.numPages):
        page = file.getPage(page_num)
        page.rotateClockwise(angle)
        file_output.addPage(page)
    with open(file_path, 'wb') as f:
        file_output.write(f)


def convert(dir):
    path_list = []

    path_file = join(dir, "*.svg")
    filename = glob.glob(path_file)
    path_list.extend(filename)

    for file in path_list:
        converted_file_name = join(dir, (basename(file).split('.', 1)[0] + ".pdf"))
        print(file + "を" + converted_file_name + "に変換します。")
        cairosvg.svg2pdf(url=file, write_to=converted_file_name)
        print(converted_file_name + "を出力しました。")
        rotate(converted_file_name, 270)
        print(converted_file_name + "を回転しました。")
    return


def main():
    image_path = getcwd() + '/images'
    print(image_path + 'のファイルが対象です。')
    convert(image_path)


if __name__ == "__main__":
    main()

できれば、縦横に関わりなくgraph命令で作成した図が入るとうれしいです。

@kmuto
Copy link
Owner

kmuto commented Oct 6, 2021

すごく安直には、graphのものはTeXで\reviewincludegraphicsに展開されるので、review-custom.styで

\DeclareRobustCommand{\reviewincludegraphics}[2][]{%
  \includegraphics[#1,angle=90]{#2}}

と90度回転を強制すればいちおうすべての図版について回転します。ただデフォルトのスケール設定のwidth=\maxwidthだとあふれることに変わりはないですね。graph (plantuml)の定義でサイズ指定ができるなら、pdfmaker下のuse_original_image_size: true を有効にして、図版類はすべて原寸にする、が現状では最も図版作成者が意図したとおり にはなると思われます。

//imageだと3つめ引数で「latex::includegraphicsに渡せるパラメータ」の記法があってそこでスケールやangleの指定ができるのですが、//graphだとそれがないことに気付きました。ただこのパラメータ記法はとってつけた形でほかのビルダ指定記法と異なり収まりが悪いので、構文解析器の置換とともに別のオプション指定構文を導入したい…と思って早何年となっていますね。review-extで//graphに4つめオプションを指定するようなものを作り、そこでパラメータ指定する、といった対処方法はありそうです。

なお、JLREQ仕様での縦書き内図配置 4.3.3 https://www.w3.org/TR/jlreq/#requirements_for_illustration_positioning_in_vertical_mayout
を見てたんですが、これはキャプションとセットになった縦中横・かつ場合によってはラッピングフロー配置なので、TeXでは「相当困難な表現」になりそうです。
できなくはないけれども、結局TeXソースに戻っていろんな配置をちまちま手で入れて、ずれたらまたちまちま直して、ということになるので、Re:VIEWをソースにしていた場合はそのあとの固有の書き換えフィルタの作成・調整がかなりたいへんですね。

@huideyeren
Copy link
Contributor Author

ひとまず、画像の向きについては解決できました。
ただ、おっしゃる通り、画像サイズの問題から切れてしまう部分があるようです。

妥当な解決策には #1750 をするしかないのでしょうが、これについては別に議論、ということで。

なので、いったんクローズします。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants