68913
InD-BOARD
他人を誹謗中傷する発言や個人売買・違法コピーに関する書き込みは禁止です。
トラブルに関する質問は、OSやアプリケーションのバージョン、周辺機器等の情報も記入して下さい。
質問へのレスには必ずお礼のコメントを付けましょう。

- HOME - 記事検索 - 投稿回数 - 携帯用URL - フィード - ヘルプ - 管理人用 -
新規投稿フォーム(返信は各スレッドの返信ボタンからお願いします。)
※「投稿キー」を入力しないと投稿できませんので注意して下さい。

名前
Mail
URL
新規投稿タイトル
画像添付
文字色
Cookie / パスワード
投稿キー (※投稿時に 9509 を入力してください)
相互参照の仮想ボディ / tyaa
相互参照機能で入れ込んだ場合、仕様として仮想ボディが通常よりもかなり幅広にとられてしまうと思います。

ただ、「ページ数」だけの表記にした状態で使用した際、
いくらなんでも仮想ボディが大きすぎるような気がしています。

添付のように、テキストなら5つ入るところを、相互参照で作った場合は3つしか入らないのです。
これって回避しようがないものでしょうか?
(最悪はフレームを大きめにとって見た目で揃える形になるとは思いますが...)

No.9963 2020/07/29(Wed) 14:53:31
Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0
数式ってどうされてますか? / たら
数式ってInDesignではまったく実装する気配がないですよね。
やはりイラレで作るのが王道なんでしょうか。

みなさんもお仕事をやっていると何度かは数式に遭遇してきたことと思います。
私は簡単なものならアンカー付きテキストで、少々難しいものはイラストレーターでイラスト的に作って対処してきました。

今度、高校生向けではありますが、
数学の問題集60ページを作成することになり、
かなり焦っています。

いんてふてふを導入するにも、
今からTexを覚えるなんて間に合うわけもなく…。

No.9951 2020/07/10(Fri) 17:43:34
Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0

Re: 数式ってどうされてますか? / Uske_S URL
たらさん:
割と真面目な話としては、しっかりした数式組版はInDesignでは難しいです。
https://www.lambdanote.com/products/mathtypo

InDesignで全部済ませるとなると、なんちゃって数式になることはご留意ください。
その上でどうすべきかですが、場当たり的な解決策としてはおっしゃるような方法がベターだと僕も考えています。
ただそれが小中ならまだしも高校数学となると難しいでしょう。
もしきちっとしたものを、ということでしたら専門のかたに依頼してもいいでしょうね。

あとはこういうツールもあるみたいなので、ご検討されはどうでしょうか。
https://www.lyx.org/WebJa.Home
僕は使ったことがないので使用感まではお伝えできませんが、OSSなので無料ですし、試して見る価値はあるかもしれません。
もし気に入ったら、いくらかDonation(寄付)していただけるといいかと思います。

No.9954 2020/07/10(Fri) 18:14:52
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36

Re: 数式ってどうされてますか? / びざーる Email
数式、前に受注してた時はMathMagic使ってました。
http://www.mathmagic.jp/

Wordの数式も取り込めるのと、かなり細かいところまで設定を追い込めるので、高校くらいならなんとかなるのではと思いますが、組版する方に「こうなっているべき」という目がないと設定が追い込めないです。
まだCatalina対応していないですけど…
あとね、高いです…
InDesignのバージョンが上がると当然MathMagicのバージョンも上がるのですが、コンスタントに数式の仕事がないと、バージョンアップ代払うのが辛い。というくらい高い。

No.9955 2020/07/12(Sun) 14:45:58
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Safari/605.1.15

Re: 数式ってどうされてますか? / たら
Uske_S様
ありがとうございます。LyXはPDFを作れるみたいですね。ためしに使ってみようと思います。

びざーる様
プラグインは確かに価格がネックですね…。定期的なverUPは絶望的でしょうし。しかし、気になるのはやはりとっつきやすさです。初心者の私でも使えるような感じなのでしょうか?メーカーサイトだと軽くしか書かれてないですので…。


前回見本からするに、イラレで対処できる雰囲気ではなかったので、現状だとWordの数式で作ってPDF化してリンクさせる、といった工程になりそうな予感がします…。
数百点くらいな数のWordとPDFが必要そうですが…。

ただ、意外とWordの数式機能は簡素であったので、初心者の私にはよさそうな気もしています。

No.9957 2020/07/13(Mon) 13:46:32
Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36 Edg/83.0.478.61

Re: 数式ってどうされてますか? / Uske_S URL
単純にLaTeXを使った数式の画像だけがほしければ、
https://www.codecogs.com/latex/eqneditor.php
こういうサービスもあります。

InDesign側の注釈や条件テキスト、印刷しないアンカーテキストボックスなどに数式自体は埋めて見えなくしておいて、修正が入ったらここで画像を再生成して再リンク、というのも…どうでしょう…^^;;;

No.9958 2020/07/13(Mon) 14:48:47
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36

Re: 数式ってどうされてますか? / Uske_S URL
解の方程式程度だと

\frac{-b\pm\sqrt{b^2-4ac}}{2a}

ですね。高校数学くらいなら、タグは覚えてしまえばそんなに難しくないと思います。

No.9959 2020/07/13(Mon) 14:50:31
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36

Re: 数式ってどうされてますか? / びざーる Email
MathMagicは、使い方としてはさほど難しくはありません。また、今回のような用途だと、Wordの数式を変換して持ってこられるところが役に立つかもしれません。
Wordの数式変換は、確か画像(EPSなど)に書き出すことができるので、MathMagicを持っているところに数式変換だけ頼んでしまうこともできるかと思います。
また、使用感ですが、体験版を使うことができます(10回だけ起動できるという制限がついています)ので、それで確かめられても良いかと思います。
http://www.mathmagic.jp/download/demo_prime_InD.html
ベンダーは、問い合わせればかなり細かいことまで答えてくれるところという印象ですので、疑問点は直接ぶつけてみるといいかと思います。
高額なものなので、それを導入してペイするかどうかが一番の問題ですね。

No.9960 2020/07/13(Mon) 15:51:48
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Safari/605.1.15

Re: 数式ってどうされてますか? / びざーる Email
手元に9.3(CC2017まで対応)まであったので、起動して確認してみました。
Wordの数式を、添付画像で確認できる形式に書き出すことができます。

No.9961 2020/07/13(Mon) 16:13:01
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Safari/605.1.15

Re: 数式ってどうされてますか? / たら
Uske_Sさま、びざーるさま
いろいろとありがとうございます。やはりMathMagicが一番よさそうですね。ただ、やはりお値段がとてもネックです。
ケタが1つ少なければ申請しやすいのですが…。

ただ、ご紹介いただいたオンラインの入力ツールを使って、
TeX数式を作成し、それをコピペしインてふてふで変換する、
といったこともできるのでは?という気がしてきました。
なんとなく、これが解決の糸口っぽいです。
お二人の助力のおかげです。ありがとうございます。

No.9962 2020/07/14(Tue) 18:11:08
Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0
ここまでインデントをメニューアクション出来ますか? / tyaa
メニューアクションの話題が出たので便乗なのですが…

app.menuActions.itemByName("「ここまでインデント」文字").invoke();

他は編集メニューでも動くのに、ここまでインデントだけは
どうにもエラーが出てしまうようです。

以前、トライして解決できないままでした。

回避方法とかないものなのでしょうか・・・

No.9950 2020/07/10(Fri) 16:39:14
Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0

Re: ここまでインデントをメニューアクション出来ますか? / 通りすがり
こちら

app.menuActions.itemByName("「ここまでインデント」 文字").invoke();

で動くと思いますが、いかがでしょうか?

tyaaさんがアップされたものとの違いは

・カギカッコが半角であること
・終わりカギカッコの後にスペースが入っていること

です。これ、結構落とし穴ですよね・・・。

No.9952 2020/07/10(Fri) 17:59:10
Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:78.0) Gecko/20100101 Firefox/78.0

Re: ここまでインデントをメニューアクション出来ますか? / Uske_S URL
通りすがりさんのおっしゃる通り、まぁ、罠もいいところですねw

余談ですが、このやり方でもうまくいきます。
app.menuActions.itemByName("$ID/Indent To Here").invoke();

ただしテキストを挿入できる状態でないとエラーになるので、isValidなどで条件判断してください。

No.9953 2020/07/10(Fri) 18:05:46
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36

Re: ここまでインデントをメニューアクション出来ますか? / tyaa
通りすがりさん、Uske_Sさん

ありがとうございます!!うまくいきました!
長年の謎が解けてスッキリしました。もっと早く質問すべきでした…。

No.9956 2020/07/13(Mon) 13:08:51
Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0
「全ストーリーの再計算」をスクリプトで実行したい / snl
いつもお世話になっております.

表題の通り,下記ページにある全ストーリーの再計算をスクリプトから実行できないか探しています.

おかしな動作をする書類を再構築するには(InDesign CS3以降)
https://helpx.adobe.com/jp/indesign/kb/235066.html

Ctrl + Alt + / キー(Windows)
Command + Option + / キー(Mac OS)

実行する方法はありますか?

以上,よろしくおねがいします.

No.9945 2020/06/30(Tue) 15:13:39
Mozilla/5.0 (Linux; Android 9; SOV36 Build/47.2.C.1.126; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/83.0.4103.101 Mobile Safari/537.36 Sleipnir/3.5.21

Re: 「全ストーリーの再計算」をスクリプトで実行したい / Uske_S URL
snlさん:
メニューアクションで実行できますよ。

app.menuActions.item("全ストーリーを再計算").invoke();

でOKです。

No.9946 2020/06/30(Tue) 17:41:54
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36

Re: 「全ストーリーの再計算」をスクリプトで実行したい / Uske_S URL
すみません、こっちでした

app.menuActions.itemByName("全ストーリーを再計算").invoke();

No.9947 2020/06/30(Tue) 17:46:42
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36

Re: 「全ストーリーの再計算」をスクリプトで実行したい / snl
Uske_Sさん
ありがとうございます!

明日試してみます!

No.9948 2020/06/30(Tue) 18:11:54
Mozilla/5.0 (Linux; Android 9; SOV36 Build/47.2.C.1.126; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/83.0.4103.101 Mobile Safari/537.36 Sleipnir/3.5.21

Re: 「全ストーリーの再計算」をスクリプトで実行したい / snl

Uske_Sさま

ご教示頂いたもので問題なく動いたようです.
ありがとうございました.

No.9949 2020/07/01(Wed) 15:17:21
Mozilla/5.0 (Linux; Android 9; SOV36 Build/47.2.C.1.126; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/83.0.4103.101 Mobile Safari/537.36 Sleipnir/3.5.21
InDesignのchangeText()について / まるこめ
初めて投稿させていただきます。どうぞよろしくお願いいたします。

InDesignのスクリプトに関しての質問です。
changeText()の戻り値をとろうとすると、最後の1文字がきちんと取得できません。
例えば"test"を"abc"で置換する場合、app.changeText()[0].contentsが"ab"となります。
changeGrep()では"abc"となります。
どこか書き方を間違っていますでしょうか。
changeGrep()を使えば望む結果が得られるので火急の問題というわけではないのですが、気になったため質問させていただきました。
ご教示いただけますと幸いです。
どうぞよろしくお願いいたします。

# 環境
Windows 10
InDesgin 14.0.3
VSCode 1.46.1

# コード
```
function myChangeText(findStr, changeStr) {
app.findTextPreferences = app.changeTextPreferences = NothingEnum.NOTHING;
app.findTextPreferences.findWhat = findStr;
app.changeTextPreferences.changeTo = changeStr;
var result = app.changeText()[0];
app.findTextPreferences = app.changeTextPreferences = NothingEnum.NOTHING;
return result;
}

function myChangeGrep(findRgx, changeStr) {
app.findGrepPreferences = app.changeGrepPreferences = NothingEnum.NOTHING;
app.findGrepPreferences.findWhat = findRgx;
app.changeGrepPreferences.changeTo = changeStr;
var result = app.changeGrep()[0];
app.findGrepPreferences = app.changeGrepPreferences = NothingEnum.NOTHING;
return result;
}

// テスト1
// var tmp1 = myChangeText("test", "abc");
// $.writeln(tmp1.toSpecifier())
// $.writeln(tmp1.contents); // ab

// テスト2
var tmp2 = myChangeGrep("test", "abc");
$.writeln(tmp2.toSpecifier())
$.writeln(tmp2.contents); // abc

```

No.9937 2020/06/25(Thu) 09:00:15
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36

Re: InDesignのchangeText()について / Uske_S URL
まるこめさん:
僕も InDesign 2019、2020 で再現しました。
しかし調べた限りでは原因がイマイチわかりませんでした。
changeText()[0].contents は確かに "ab" になってしまいますね。
一方で、以下のように findText() したものを後から参照すると正しく contents を取得できます。

function myChangeText(findStr, changeStr) {
app.findTextPreferences = app.changeTextPreferences = NothingEnum.NOTHING;
app.findTextPreferences.findWhat = findStr;
app.changeTextPreferences.changeTo = changeStr;
var fd = app.activeDocument.findText();
var ch = app.activeDocument.changeText();
app.findTextPreferences = app.changeTextPreferences = NothingEnum.NOTHING;
return fd;
}

function myChangeGrep(findRgx, changeStr) {
app.findGrepPreferences = app.changeGrepPreferences = NothingEnum.NOTHING;
app.findGrepPreferences.findWhat = findRgx;
app.changeGrepPreferences.changeTo = changeStr;
var result = app.changeGrep()[0];
app.findGrepPreferences = app.changeGrepPreferences = NothingEnum.NOTHING;
return result;
}

// テスト1
var tmp1 = myChangeText("test", "abc");
$.writeln(tmp1[0].toSpecifier())
$.writeln(tmp1[0].contents); // abc

元の検索語句から置換後の文字列 "abc" を取得できるのに、changeText() では取得できないというのは不具合な気がします…。
(なぜ検索語句の contents が "test" ではないか、の説明は必要でしょうか?)

僕自身は普段から(よほどの事情がない限り) changeGrep() しか使っていないので、この件は知りませんでした。 一応、Adobeのスクリプティングガイド等も当たってみましたがそれらしい記述は見つからず。

おっしゃるように changeGrep() で対処されるほかないのですが、ちょっと気持ち悪いですね……

No.9938 2020/06/25(Thu) 12:00:50
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36

Re: InDesignのchangeText()について / まるこめ
Uske_Sさま

早速お教えいただきありがとうございます!
自分の環境でも、findText()から取得することができました。

重ね重ね恐縮ですが、もう一点お教えいただけないでしょうか…。
>検索語句の contents が "test" ではないか
についてです。
戻り値が、toSpecifier()で示されるように「どのテキストフレームの何文字目から何文字目」という参照先の指示だからではないかと思ったのですが、

var tmp1 = myChangeText("test", "abcdef");
$.writeln(tmp1[0].toSpecifier())
$.writeln(tmp1[0].contents);

を実行すると、下記のようになります。

(/document[@id=12]//story[@id=113195]/character[0] to /document[@id=12]//story[@id=113195]/character[3])
cdef

自分の仮説が正しいなら、「abcd」となるように思います。
どこかに誤解がありますでしょうか。それとも根本的に間違っていますでしょうか。

もし気が向かれましたら、またお教えいただけますと幸いです。
何卒よろしくお願いいたします。

No.9941 2020/06/25(Thu) 14:50:34
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36

Re: InDesignのchangeText()について / Uske_S URL
おっしゃるとおりの理解でいいと思います。
これについては僕自身も「結果からの予測」なので確実なことは言えないのですが、僕もそういう理解です。
要するに「何文字目」を参照するから test ではなく abc が参照できるというわけです。
ただし、これは置換後の文字列が置換前の文字列と同数か少ない場合です。提示されたように、置換後の文字列のほうが多い場合は結果が異なります。

僕が掲示したコードの一部を下記のように書き換えた上で、test という文字列を選択した状態でテストしてみてください。

var fd = app.activeDocument.selection[0].findText();

選択範囲が cdef に移ることが分かっていただけるかと思います。

実は話がややこしくなるので前回の回答には書いていないのですが、InDesignの検索置換の都合上このようになります。これが最初にお問い合わせいただいた "ab" としてしか contents を取得できないことと関係があるような気はしています。

なぜこうなるかですが、以下についても「結果からの予測」です。あしからず。
InDesignの検索置換の特性上、test という文字列に対して abcdef という文字列が直接挿入されるわけではありません。
t の代わりに a 、 e の代わりに b 、s の代わりに c 、また t の代わりに d というように、文字それぞれの contents プロパティを置き換えるようにして置換されます。それぞれ別々の色の文字色を当てて置換してみるとそれが分かると思います。
しかし、残りの ef はもう入るべき文字がありません。なので最後の文字 d (元は2回目の t )と同じ文字属性を用意し、そこに e と f も入れられます。
この時、選択範囲も同じように e 、f 、と引きずられます。
しかし選択していた範囲は4文字なので、2文字増えた分だけずれてcdef に選択範囲が移ってしまった、というのが僕の理解です。

このことがスクリプトの結果からも言えるのです。
ただ changeText() と changeGrep() の結果の違いの説明にはならないので、これが先の問題とどこまで関係しているかはわかりません。

いずれにせよ、スクリプトで検索置換を行う場合はこういうケースもあります(選択範囲が後ろへずれる)のでご注意ください。

なんとなく伝わったでしょうか?

No.9942 2020/06/25(Thu) 19:35:28
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36

Re: InDesignのchangeText()について / まるこめ
Uske_S様

お返事が遅くなり申し訳ございません。

文字色を変えて試してみて、おっしゃっていることがよく分かりました。
character1つずつのcontentsを置換しているというのは、個人的には驚きでした。
スクリプトを書き始めて日が浅いので、こういったことが起こりうると事前に知っておくことができて良かったです。
大変勉強になりました。
重ね重ね、本当にありがとうございました!

No.9943 2020/06/26(Fri) 14:49:02
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36

Re: InDesignのchangeText()について / Uske_S URL
伝わったようで良かったです。

検索置換では、置換前後で文字数が変わる場合に注意が必要です。せっかくなので置換後に文字数が減る場合のリスクもお伝えしておきます(ご存知でしたらすみません)。

正規表現検索置換でもテキスト検索置換でも、先般お伝えした通り、InDesignの検索置換は検索マッチした文字に対して頭から順番に contents の中身を置換していきます。
文字属性が途中から変わる、そして文字数が減る場合、添付画像のような結果になることがあります。
(端 の字の色が変わっています)
先の検索置換の仕組み?を理解していればこの結果もご理解いただけると思います。このような事があるので検索置換は気をつけなばなりませんし、ましてやスクリプトで一括ドン! は本当に気をつけてください。

この例では 釜戸(?=端次郎) で検索し、 竈 だけで置換すれば「端」の文字属性は変わりません。
検索置換は便利ですが安易に行うと痛い目を見るので、スクリプトで操作する場合は本当に注意してくださいね。
蛇足ながら失礼しました。

No.9944 2020/06/29(Mon) 09:56:42
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36
ページパネル / kk
お願いします。
indesign cc2014
mac os 10.9.5

Timemachineからバックアップして
osを10.9.5から10.12.6に上げた状態で
過去の10.9.5のosで作成したIndesign cc2014の
ファイルを開くとページパネルのノンブル表記が全て1からに
なっていて、ドキュメントと違う状態になっています。
ノンブルを再指定しても、マスター上で作り直しても
idmlから開いても直りません。
解決方法があればお願いいたします。

No.9939 2020/06/25(Thu) 13:11:47
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36

Re: ページパネル / YUJI
環境設定の[一般]で、[ページ番号]の[表示]を[ページごと]から[セクションごと]に変更すれば直りませんか。
No.9940 2020/06/25(Thu) 13:25:09
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36
スクリプトの動作結果が変わる理由が説明できるようになりたいです / ヒース Email
お世話になります。
よろしくお願いします。

以下のExtend Scriptソースがあるのですが、後半にあるアラートをコメントアウトするしないで、InDesignドキュメントの動作結果が変わります。

アラートを実行した時の動作が、本来求めている動作です。
動作が変わってしまう理由を説明できるようになりたいのですが、どなたかご教示いただけないでしょうか。

長方形オブジェクトを変数に代入した後、何かしらプロパティを参照するかしないかで動作が変わっているようだというところまでは気づきました。
以下のソースでは、この参照をアラートの部分で行っています。
(ですので、アラートの部分は、コンソールへ書き出すでも何でもいいので、アラートにしている部分はあまりつっこまないでいただけるとうれしいです。)

実は、職場の高卒のルーキーが一生懸命勉強してくれていて、以下のようなソースを書いてくれたのですが……理由が説明できず、今回こちらに質問をさせていただきました。

私以外プログラマーが職場にいないので、わからないで終わらすのは申し訳なく、かと言ってなんとググらせればいいかヒントもだせず、とりあえず調べると言って宿題をあずかりましたw

お手数をおかけします。
よろしくお願いします。





///// ここから下がソースです。 //////////


var doc = app.documents.add();


// ● 長方形を適当に作成
var rct;

for (var i = 0; i < 5; i++) {
rct = doc.rectangles.add();
rct.geometricBounds = [
i * i * 10,
i * i * 5,
i * i * 10 + i * i + 10,
i * i * 5 + i * i + 5
];
rct.fillColor = doc.swatches[i + 4];
rct.name = (i + 1).toString();
}


// ● 作成した全長方形から、もっとも上下左右にある長方形を調査して取得
var mTop = doc.rectangles[0].geometricBounds[0];
var mTopRct = doc.rectangles[0];

var mLeft = doc.rectangles[0].geometricBounds[1];
var mLeftRct = mTopRct;

var mBottom = doc.rectangles[0].geometricBounds[2];
var mBottomRct = mTopRct;

var mRight = doc.rectangles[0].geometricBounds[3];
var mRightRct = mTopRct;

var rct = doc.rectangles;
for (var i = 1; i < rct.length; i++) {
if (rct[i].geometricBounds[0] < mTop) {
mTop = rct[i].geometricBounds[0];
mTopRct = rct[i];
}

if (rct[i].geometricBounds[1] < mLeft) {
mLeft = rct[i].geometricBounds[1];
mLeftRct = rct[i];
}

if (rct[i].geometricBounds[2] > mBottom) {
mBottom = rct[i].geometricBounds[2];
mBottomRct = rct[i];
}

if (rct[i].geometricBounds[3] > mRight) {
mRight = rct[i].geometricBounds[3];
mRightRct = rct[i];
}
}


// ● 以下のアラートの実行有無で、InDesignドキュメントの動作が変わります
alert(
mTopRct.geometricBounds[0] + ", " +
mLeftRct.geometricBounds[1] + ", " +
mBottomRct.geometricBounds[2] + ", " +
mRightRct.geometricBounds[3]
);


// ● 作成
var rctLast = doc.rectangles.add();
rctLast.geometricBounds = [
mTopRct.geometricBounds[0],
mLeftRct.geometricBounds[1],
mBottomRct.geometricBounds[2],
mRightRct.geometricBounds[3]
];

No.9926 2020/06/22(Mon) 22:39:56
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36

Re: スクリプトの動作結果が変わる理由が説明できるようになりたいです / お〜まち URL
これは「値渡し」と「参照渡し」を理解していないと説明が難しいですね。
私も正確には理解していないので、うまく説明できないのですが(^^;

端的に言うと「// ● 作成」の次の行
var rctLast = doc.rectangles.add();
で長方形が新たに作られることによって、mTopRct、mLeftRct、mBottomRct、mRightRctの参照先が移動しちゃうんです。
ここを
var rctLast = doc.ovals.add();
というふうに楕円にしてしまうと、Alert行の有無に関係なく、望んだ大きさの楕円がつくられますので試してみてください。

逆にAlert行があることによって参照先の移動が起こらないことが、私には説明できません。そこは誰か詳しい人、お願いします。

No.9927 2020/06/23(Tue) 00:53:11
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.98 Safari/537.36

Re: スクリプトの動作結果が変わる理由が説明できるようになりたいです / ヒース Email
お〜まちさん


ご返信ありがとうございます。
スレ主です。

「値渡し」と「参照渡し」については、私は理解できているレベルだとご認識いただければと思います。
(昔、思うように動作してくれず、一人でデバッグしながらネットでググり、長時間かけてなんとか理解にこぎつけることが出来ました。)

ですので、今回の動作はバグではなく、『var rctLast = doc.rectangles.add();』で参照先が移動しているんだろうなぁ〜というのは、想像しました。
だとしても、『Alert行の有無で動作が変わることが謎』という状況です。
どなたかご返信いただけること、気長に待ちたいと思います。


>>
>> var rctLast = doc.ovals.add();
>> というふうに楕円にしてしまうと、Alert行の有無に関係なく、望んだ大きさの楕円がつくられますので試してみてください。
>>

こちらの情報、ありがとうございました。
早速試し、動作の確認が取れました。
前述した「『var rctLast = doc.rectangles.add();』で参照先が移動しているんだろうなぁ〜」という想像で終わらせていたので、これで検証ができたのかなと認識しています。

想像で終わらさず検証の実施を、もっとクセ付けないとですね。
ありがとうございました。

No.9928 2020/06/23(Tue) 08:50:02
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36

Re: スクリプトの動作結果が変わる理由が説明できるようになりたいです / Uske_S URL
ヒースさん:
これはExtendScriptの仕様というかクセというか見方によってはバグみたいなものです。
例えば、alertメソッドをコメントアウトして以下の4行を同じ場所に追加して見てください。

mTopRct = mTopRct.getElements()[0];
mLeftRct = mLeftRct.getElements()[0];
mBottomRct = mBottomRct.getElements()[0];
mRightRct = mRightRct.getElements()[0];

alertメソッドの有無に関わらず同じ結果になるはずです。

これの詳細は下記のブログに書かれています。
http://sysys.blog.shinobi.jp/Entry/113/

コレクションオブジェクトへの追加と削除はちょっと厄介でして、コレクションオブジェクトのid、for文でループさせる際のindexを見てもらうとなんとなく変なことはわかっていただけるかもしれません。

いずれにせよ、コレクションオブジェクトへの追加や削除はgetElementsメソッドを利用してもらったほうが確実です。

No.9929 2020/06/23(Tue) 15:24:16
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36

Re: スクリプトの動作結果が変わる理由が説明できるようになりたいです / Uske_S URL
追記です。

alertメソッドなどにオブジェクトを引数として渡すと、内部的にはStringコンストラクタを経由し、オブジェクトの参照先が文字列に変換されます(暗黙的型変換)。
このタイミングでブログのisValidの副作用にあるような、オブジェクト参照先の再取得が起こっていると僕は考えています。

先ほどのgetElementsメソッドのところを下記のようにしても同じ結果が得られます。

String(mTopRct.geometricBounds[0]);
String(mLeftRct.geometricBounds[0]);
String(mBottomRct.geometricBounds[0]);
String(mRightRct.geometricBounds[0]);

特に値を代入せずとも、値をStringコンストラクタに通すだけで結果が変わるわけです。

No.9930 2020/06/23(Tue) 15:30:56
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36

Re: スクリプトの動作結果が変わる理由が説明できるようになりたいです / Uske_S URL
もういっこ追記です。

getElementsを利用するケースはもうひとつあって、オブジェクトのインスタンスを変更するケースです。
例えばコード中でTextFrameをRectangleに変えるようなケース。
InDesignのスクリプトであればTextFrames.add()したあとにContentTypeを変更するなどして実装できます。

具体的には下記のような場合に有効です。
var doc = app.activeDocument;

var f = doc.textFrames.add(); //この時点で f は TextFrame
f.contentType = ContentType.GRAPHIC_TYPE; //グラフィックフレームに変更しても…
$.writeln(f.toSpecifier()); //結果は TextFrame
$.writeln(f.hasOwnProperty("contents")); //結果は true
//f.contents = "hoge"; //<-これはエラーになる

f = f.getElements()[0]; //getElementsメソッドを挟むと…
$.writeln(f.toSpecifier()); //結果は rectangle
$.writeln(f.hasOwnProperty("contents")); //結果は false

No.9931 2020/06/23(Tue) 15:43:38
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36

Re: スクリプトの動作結果が変わる理由が説明できるようになりたいです / (z-) URL
流れ上、ゴミみたいな返信になりますがw

for (var i = rct.length - 1; i >= 0; i--) {

でも回避できますね。

No.9932 2020/06/23(Tue) 16:42:14
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Safari/605.1.15

Re: スクリプトの動作結果が変わる理由が説明できるようになりたいです / ヒース Email
Uske_Sさん
(z-)



ご返信ありがとうございます。
スレ主です。

取り急ぎのお礼です。
ちょっと、じっくり読み、実際に動かしてみてから、改めて返信させていただきます。

No.9933 2020/06/23(Tue) 17:06:14
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36

Re: スクリプトの動作結果が変わる理由が説明できるようになりたいです / ヒース Email
(z-)さん

スレ主です。
敬称モレ、大変失礼しました。

No.9934 2020/06/23(Tue) 17:07:42
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36

Re: スクリプトの動作結果が変わる理由が説明できるようになりたいです / あるふぁ
Uske_Sさんが紹介してくれたブログを書いたものですが、
いやこれはそこに書いたことでは説明できない、というかそれを書いたときかなり調査不足だったなあと反省するところでして

私も今知ったばかりなので想像というか1つの解釈でしかないのですが、

rct[i]を変数に代入した段階では、doc.rectanglesのi番目という情報が入っただけ

何かしらのプロパティを取得したとき、はじめてInDesign上のオブジェクトと紐づけされる

紐づけされた後はrectangleを増減しても参照がずれることはない

ということかなと思います。

いやはや私も経験上はPageItem系オブジェクトはアイテムが増減してもずれないイメージだったのですが、これ(http://sysys.blog.shinobi.jp/Entry/113/)を書くとき実験したらずれたので、あれ?と思いながらもずれるものとして書いちゃったのですが、もう少し詳しく検証しておくべきでした。


ただ本当に「1つでもプロパティを取得すれば参照がずれることはない」と言えるのかは不明です。
既知の例外としては上記ブログ記事に書いたように、アイテム増減後にisValidプロパティにアクセスするとずれます。

ご承知の上だろうと思いますが今回の例で言えばmTopRctから取得しなおさずにmTop等を使っておけばよかったわけで、
ほかにもUske_SさんのおっしゃるようにgetElementsを使ったり、
(z-)さんのおっしゃるようにずれても問題ない順番で処理するとか、
そんなふうにできるだけ「ずれないはず」に頼らないコードを書くようにしたいものですね

No.9935 2020/06/23(Tue) 17:48:48
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0

Re: スクリプトの動作結果が変わる理由が説明できるようになりたいです / ヒース Email
あるふぁさん


ご返信ありがとうございます。
スレ主です。

取り急ぎのお礼です。
他の方の返信確認後、改めて返信させていただきます。

No.9936 2020/06/24(Wed) 10:33:35
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36
以下のフォームに記事No.と投稿時のパスワードを入力すれば
投稿後に記事の編集や削除が行えます。
50/50件 [ ページ : 1 2 3 4 5 6 7 8 >> | 過去ログ | 画像リスト ]