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

空行挿入機能 #42

Closed
inao opened this issue Apr 17, 2013 · 24 comments
Closed

空行挿入機能 #42

inao opened this issue Apr 17, 2013 · 24 comments
Assignees
Labels

Comments

@inao
Copy link
Collaborator

inao commented Apr 17, 2013

積年の希望だった機能がございます。

InDesign上(=紙面の見た目上)での行間調整のため、段落ブロック(箇条書きの固まりとか、コードのかたまりとか)の前あるいは後ろに、意図的に空行を挿入したい場合があります。

挿入したい空行は2種類

挿入したい空行は、InDesignテキストで言うと以下の2種のみです。

  • <ParaStyle:本文>(本文1行分の空行です)
  • <ParaStyle:半行アキ>(本文1/2行分の空行です)

たとえばWEB+DB PRESSの場合は、

  • 箇条書きの最初の行の前
  • (別ボックスのリストではない)インラインのコードやコマンドの最初の行の前

に「半行アキ」という空行を入れたいです。
inao→InDesignで言うと以下になります。

本文
◆1/2行間◆
・箇条書き
・箇条書き
・箇条書き
本文
◆1/2行間◆
◆list/◆
別ボックスのリストではないインラインのコード
別ボックスのリストではないインラインのコード
別ボックスのリストではないインラインのコード
◆/list◆
本文
<ParaStyle:本文>本文
<ParaStyle:半行アキ>
<ParaStyle:箇条書き>・箇条書き
<ParaStyle:箇条書き>・箇条書き
<ParaStyle:箇条書き>・箇条書き
<ParaStyle:本文>本文
<ParaStyle:半行アキ>
<ParaStyle:リスト>別ボックスのリストではないインラインのコード
<ParaStyle:リスト>別ボックスのリストではないインラインのコード
<ParaStyle:リスト>別ボックスのリストではないインラインのコード
<ParaStyle:本文>本文

書籍によっては、半行アキではなく、1行アキ(普通の本文の空行)を入れること場合もございます。

<ParaStyle:本文>本文
<ParaStyle:本文>
<ParaStyle:箇条書き>・箇条書き
<ParaStyle:箇条書き>・箇条書き
<ParaStyle:箇条書き>・箇条書き
<ParaStyle:本文>本文
<ParaStyle:本文>
<ParaStyle:リスト>別ボックスのリストではないインラインのコード
<ParaStyle:リスト>別ボックスのリストではないインラインのコード
<ParaStyle:リスト>別ボックスのリストではないインラインのコード
<ParaStyle:本文>本文

上記の例はいずれも段落ブロックの前行に空行を入れる例でしたが、段落ブロックの後ろに空行を入れることもございます。

機能追加案

以下の両方あるいはどちらかの機能を実現していただけると、ものすごくうれしいです!
特に案2を実現していただけると、とても楽になりそうです。

案1:明示的に空行を指定する

先述したように入れたい空行はInDesignテキストで言うと以下の2種のみですので、それをMarkdown上で明示的に指定できるようにしていただきたいです。

  • <ParaStyle:本文>
  • <ParaStyle:半行アキ>

案2:空行を挿入する段落ブロックを設定ファイルで指定する

入れたい空行はInDesignテキストで言うと上記の2種のみで、入れたい個所は段落ブロックの前行あるいは後ろの行のみです。ですので以下の4種を設定ファイルで設定できるようにしていただけると、案1のようにいちいち明示的に指定する必要がなくなり、たいへん楽ちんになります。

  • <ParaStyle:本文>を前行に入れたい段落ブロックは?
  • <ParaStyle:本文>を後ろの行に入れたい段落ブロックは?
  • <ParaStyle:半行アキ>を前行に入れたい段落ブロックは?
  • <ParaStyle:半行アキ>を後ろの行に入れたい段落ブロックは?

段落ブロックの前行/後ろの行というのは、たとえば箇条書きで言うと、以下の部分のことです。

★ここが前行★
* 箇条書き
 * 箇条書き2階層目
* 箇条書き
* 箇条書き
★ここが後ろの行★
@naoya
Copy link
Owner

naoya commented Apr 17, 2013

設定ファイルにしたい、というのは原稿によって入れたり入れなかったりするからなんでしょうか?
毎回同じなら決め打ちで仕様にしてしまえばいいと思ったのですが。

@naoya
Copy link
Owner

naoya commented Apr 17, 2013

毎回違う、となるとそもそも原稿をアップロードする度に設定を切り替えられる機能が必要になりますね。
InDesign の checkbox みたいなやつ。

@inao
Copy link
Collaborator Author

inao commented Apr 17, 2013

設定ファイルにしたい、というのは原稿によって入れたり入れなかったりするからなんでしょうか?
毎回同じなら決め打ちで仕様にしてしまえばいいと思ったのですが。

キャプションの先頭記号( #34 )やコードの文字数と同様に、原稿によって異なるのです。

ただ、提案した案2は我ながら複雑すぎる気がしてきました。
もうちょっとシンプルにした提案をこの次のコメントで行います。

毎回違う、となるとそもそも原稿をアップロードする度に設定を切り替えられる機能が必要になりますね。

複雑になりすぎますね……。
Web版ではデフォルトの挙動、設定を替えて使いたい場合はダウンロードして自分で、とかですかねぇ。

@inao
Copy link
Collaborator Author

inao commented Apr 17, 2013

以下の3機能で十分な気がしてきました。

  1. 箇条書きブロックの前行を以下の3択から設定できるようにしていただく
    • 何も入れない★現状のmd2inaoの挙動★
    • <ParaStyle:半行アキ>を入れる★一番多いケースはこれです。これをデフォルト仕様に?★
    • <ParaStyle:本文>を入れる
  2. インラインコード/コマンドブロックの前行を以下の3択から設定できるようにしていただく
    • 何も入れない★現状のmd2inaoの挙動★
    • <ParaStyle:半行アキ>を入れる★一番多いケースはこれです。これをデフォルト仕様に?★
    • <ParaStyle:本文>を入れる
  3. 2種の空行を明示的に指定する記法をご用意いただく
    • 先ほどの案1と同じです
    • これは自由置換設定機能で実現できますね

1と2で80%のケースに対応できます。
1と2はターゲットが違うだけで、ロジック的には同じですね。

3も併用すれば100%のケースに対応できると思います。
3は自由置換設定機能で実現できますね。

@d-ikeda
どう思われますか?

@naoya
Copy link
Owner

naoya commented Apr 17, 2013

これだと 3 * 3 * 2 = 18 パターンになるんですが、18 パターン個別に設定できる必要があるのかな?
なんとなく組み合わせ的には数種類しかなくて、その組み合わせを切り替えられるようにするほうが使い勝手的にもシンプルな気がするんですが。

ちょっとユースケースが想像できてないのであれですが

  • WEB+DB PRESS 用設定 (連載)
  • WEB+DB PRESS 用設定 (特集)
  • 本の設定

とかで3パターンとか、そんな感じ?

内部のコード的には柔軟に変更できてもいいですが、外部仕様としてはもうちょっとシンプルにしておきたいです。

@inao
Copy link
Collaborator Author

inao commented Apr 18, 2013

なるほど。
本文デザインしてくださっているデザイナさんとも、ちょっと相談してみて整理します。

@inao
Copy link
Collaborator Author

inao commented Apr 18, 2013

伊藤さんの両書籍のデザインを担当してくださっている @n-yuji に相談しました。

結論から申しますと、ユースケースとして以下の2パターンを選択できるとうれしいです。

  • 半行アキパターン(WEB+DB PRESS、デフォルト)
    • 箇条書きブロック、インラインコード/コマンドブロックの前行に<ParaStyle:半行アキ>を入れる
  • 1行アキパターン
    • 箇条書きブロック、インラインコード/コマンドブロックの前行に<ParaStyle:本文>を入れる

また、それとは独立して、1行アキ(<ParaStyle:本文>のみの行)を明示的に挿入するMarkdown記法も決めていただきたいです。この件とも関係するのですが、この件以外の場合でも、空行を入れたくなることがそこそこありますので。

@inao
Copy link
Collaborator Author

inao commented Apr 18, 2013

いちおうご参考までに、2パターンにいたるまでの詳細ですー。

@inaoからのメール

本文設計時に、

(1)箇条書きの前行
(2)インラインのコードやコマンドの前行(別ボックスの図やリストにはしない、いわゆる本文リスト)

に、空行を指定されることが多いですよね。
空行は、1行アキのこともあれば、半行アキのこともあります。

2点、お伺いさせてください。

空行の行間ですが、「(1)(2)ともに1行アキ」または「(1)(2)ともに半行アキ」
の2パターンで統一しちゃって大丈夫でしょうか?
そうではなく、たとえば「(1)は1行アキだけど、(2)は半行アキ」みたいに異な
る行間にしたくなることもございますか?

上記以外で、空行を入れることがあるケースは、何がございますでしょうか?
「この段落スタイルの前も要空行なことがある」「この段落スタイルの(前行で
はなく)うしろの行に、要空行なことがある」などで教えていただけると助かり
ます。

@n-yujiからのお返事(転載許可を得ています)

1/2空行は、とてもやっかいな存在なのでして……、

「(1)は1行アキだけど、(2)は半行アキ」みたいな
ケースは、まあ、ありえます。

そもそも「半行アキをとる」というコマンドが用意されているわけではなく、
単に見た目そうなるように行送りなど調整しているわけで、
これは次の行との関係で変わってきます。
普通に本文1行アキでも半行アキに見えることもあって、
それで使い分けが必要になってしまうわけですけど。

処理上はどちらかに統一しておき、
あとは見た目で手動対応でいいんじゃないかなあと思いますけども。

また、「箇条書きやコードの後」には
本文空行入れたり入れなかったりです。

「箇条書きやコードの後の2行取り小見出し」の前、などにも
本文空行入れることがあります。
行取りの前の行はグリッドに沿ってないと処理が不正になるためです。

いずれも、
「長さがなりゆきであやふやなもの(箇条書きやコード)」と、「グリッドに沿 わせる本文」
を共存させるさいの見た目のごまかし処理なので、
厳密に定義しようとするとかえって破綻すると思います。

naoya added a commit that referenced this issue Apr 19, 2013
@naoya
Copy link
Owner

naoya commented Apr 19, 2013

とりあえず実装して web 版に UI もつけました。

Markdown での空行フォーマットはまだ非対応です。というか、Markdown で空行開けたいなら本来的には明示的に改行で空行いれればいいだけなんですよね。

ただ、それだと Inao / InDesign 的に要らない空行が入っちゃうから今は削除してるという。その前提で、明示的な空行とは何なのか・・・ってところなんですけども。

どういうマークアップがいいかなあ

inao added a commit that referenced this issue Apr 19, 2013
キャプション付きの図やリストは別ボックスになりますので
@inao
Copy link
Collaborator Author

inao commented Apr 19, 2013

どうもありがとうございました!
上記のpull requestに加え、以下のテストも追加していただきたいです。

キャプションを付けないインラインのリスト白文字(黒地に白文字)のテストがございませんでしたので。
インラインのリスト白文字はWEB+DB PRESSでは使わないのですが、書籍ではよく使います。

--- in md2inao
    !!! cmd
    function bar(b) {
        alert(b); (注:コメント)
    }
--- expected
<ParaStyle:半行アキ>
<ParaStyle:リスト白文字>function bar(b) {
<ParaStyle:リスト白文字>    alert(b); <CharStyle:リストコメント> コメント <CharStyle:>
<ParaStyle:リスト白文字>}

@inao
Copy link
Collaborator Author

inao commented Apr 19, 2013

空行のマークアップは「強制的に改行したい場合は、行末に2つのスペースを挿入すればよい」という仕様もあるらしいのですが、これは避けていただきたいです。

http://ja.wikipedia.org/wiki/Markdown#.E6.94.B9.E8.A1.8C

行末のスペースは校正時に大抵消しちゃいますので。

@naoya
Copy link
Owner

naoya commented Apr 20, 2013

そうですねえ。<br> とかをうまく使う感じかな・・・

何かいい案ありますか?

@inao
Copy link
Collaborator Author

inao commented Apr 20, 2013

ございませんです 😢

@d-ikeda
Copy link
Collaborator

d-ikeda commented Apr 22, 2013

横からで流れが違う形ですいませんが、この改行の扱いが意図しない形になることが多いので変えたのがGitHub Flavored Markdownみたいですね。

https://help.github.com/articles/github-flavored-markdown

こちら参考までです。大きな副作用があるかもしれませんし、変更が大変そうだな、と思います。

@naoya
Copy link
Owner

naoya commented Apr 22, 2013

そうそう、この手のテキストフォーマットでの改行の取り扱い方は結構鬼門なんですよね。
はてな記法のときも、その Github Flavored のと全くおなじ課題がありました。

Hello
World

を HTML 的に

<p>
Hello<br />
World
</p>

と表現するか

<p>Hello World</p>

と表現するかの違いで、HTML原理主義的な人は後者のほうが好ましいと考えるようです。

HTML はテキストの見た目を整形するものではなくあくまで論理構造をマークアップするものなのに「ここで改行を入れることで見た目を調整して」的に使われた <br> をそのまま表現するのはいかがなもんか、というのが彼らの主張ですね。

とはいえ一方、多くのユーザーは改行を入れたらそれが改行として反映されることを望むのだから、変に HTML のマークアップにこだわる必要はないじゃないかというカジュアル派がその対局です。

自分としては、確かにカジュアル派の言い分も分かるのですが、将来にわたって考えたときのメンテナンスビリティを考えると、論理構造とスタイルは分離されるべきであり、原理主義的な考え方が好ましいと思います。

Github の場合は、論理構造がどうこうちうより、プログラミングのドキュメントはプレインテキストで書かれることが多くそれは改行をそのまま反映しないと執筆者の意図しない表現になってしまうことを考慮して、カジュアルな仕様を採っているのではないかと思われます。

・・・という事情があるので、md2inao でも「空行一行」とは言えあまり安易な仕様にしたくないなあというので困っていたりします。

@naoya
Copy link
Owner

naoya commented Apr 22, 2013

そういう意味でいくと InDesign Text (?) には論理構造とは別にスタイルを定義するんだと思し、半行アキとか一行アキは本来そちらで調整されるべき項目な気がしますが現実にはそれだと難しい、というところですかね?

@n-yuji
Copy link

n-yuji commented Apr 22, 2013

InDesignに「ブロック要素」があればたいがい解決する話なんでしょうけど、CSSで<div>で囲むようなものは、InDesignにはないんですよね。

@naoya
Copy link
Owner

naoya commented Apr 22, 2013

なるほどそうなんですね。

だから地続きの <ParaStyle:リスト> とかで「ここからここまでがリストブロックである」という表現になるんですねえ。

@d-ikeda
Copy link
Collaborator

d-ikeda commented Apr 22, 2013

HTML原理主義的とカジュアル派の考え面白いですね。どちらの言い分も正しい側面があり、悩ましい問題ですね。

HTML原理主義的に考えると
みたいなタグを入れるのが良いですかね。この場合、

本文中に「
」と表示したい場合にどうするか、とかが検討点かな、と思いました。

@naoya
Copy link
Owner

naoya commented Apr 22, 2013

本文中の表示はいずれにしてもエスケープが必要です。それは HTML も同じ。

`<br>`

とするか明示的にエスケープして

&lt;br&gt;

です。これは「HTML を HTML として解釈する」という Markdown の機能の側面であります。

@d-ikeda
Copy link
Collaborator

d-ikeda commented Apr 22, 2013

ありがとうございます。これはエディタでハイライトするなりして意識しておく必要がありますね。

#GitHubでも同様の動作なんですね。私の書き込みで<br>が表示されてなくて気づきました。

@naoya
Copy link
Owner

naoya commented Apr 22, 2013

いちおう md2inao には HTML を素で書いたら警告するような機能を付けています。
まだ Web版ではその警告が出力できてないので、それも作らないとですね。
先日のはそのための UI 変更だったりもします。

@d-ikeda
Copy link
Collaborator

d-ikeda commented Apr 23, 2013

すごいです。警告が出ると便利ですね。

Web版での警告表示もできるとすごくうれしいです!

@inao
Copy link
Collaborator Author

inao commented May 13, 2014

冒頭のお願いは実装してくださっていますので、クローズします。

後半のやりとりである明示的に空行を入れる方法は、現状はまだありません。
ただ、入れる必要があるケースはほとんどないので、運用でカバーします。

@inao inao closed this as completed May 13, 2014
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

4 participants