単語またはフレーズ内の文字の線形長を計算する自動システムはありますか?


7

私はこの質問をすることから離れているかもしれませんが、文字や単語の線形の長さを取得する方法はありますか。つまり、「スーパー」という単語を取り、文字の外側の境界を測定すると、測定値が得られます。フォントとフォントサイズを指定した場合、この測定値を教えてくれる何かがありますか?私はここの新人なので、優しくしてください。前もって感謝します。

回答:


6

TeX / LaTeXを使用するのは簡単です(OpenTypeおよびTrueTypeフォントに簡単にアクセスできるようにするには、xetexやluatexなどの新しいバージョンを使用する必要があります)。

\documentclass{standalone}
\usepackage{fontspec}
\setmainfont{Myriad Pro Black Condensed}% <<-- change to desired font
\usepackage[nomessages]{fp}
\makeatletter
\newcommand{\printer}[3][in]{%
\FPeval\temp{round(\expandafter\strip@pt\csname#2\endcsname/72.27:#3)}%
\temp#1}
\makeatother
\begin{document}
\newlength{\samplewidth}
\settowidth{\samplewidth}{Test} % <<-- change to the text which you wish to measure
\printer{samplewidth}{4}
\end{document}

出力:0.2060in

OpenType機能がサポートされています。

\settowidth{\samplewidth}{Test 0123456789}
\printer{samplewidth}{4}\par
\addfontfeature{Numbers={Proportional,Lining}}
\settowidth{\samplewidth}{Test 0123456789}
\printer{samplewidth}{4}

出力:

0.8425インチ

0.7911インチ


1
文脈依存の代替、裁量的な合字、OpenTypeの機能/置換の範囲について言えば、「些細な」が私が使用する言葉であることはよくわかりません... :) [BTW: InDesign listserv、またはあなたは同じ名前の別のLaTeX愛好家ですか?]
Alan Gilbertson

1
どのOpenType機能をオンにしたいか---それらはすべて機能し、アクセス可能です(事前に作成されたプログラムでオプションを有効にすると、取るに足らないものと見なされます)。はい、私はInDesignリストのウィルダムです。
WillAdams、2014年

<広くニヤリと笑う>そもそも真っ青で完全に支払われたオタクだけが14行のコードを「自明」と呼ぶことができるので、必要なOTFパラメータを追加しても同様に適格であると私は思います。
アランギルバートソン2014年

ここで会えてうれしいです。あなたは、他の方法ではここではあまり表現されない知識のいくつかの領域を持っています(LaTeXが適切なケースであると言いました)。
アランギルバートソン2014年

@AlanGilbertson 14行は難しい場合がありますが、アルゴリズムの効果がなく、ドキュメントからコピーされた場合、それらが設計されたスコープで使用される場合は難しくありません。行数は単純に画像に入ります。
joojaa

3

一般的に利用可能なツールに関しては、いいえ、[ランダムフォント] [サイズ]と[文字]を入力として受け取り、長さを吐き出すものはありません。これが常に当てはまる理由はいくつかありますが、主な理由は、すべての通常の(モノスペースではない)フォントには独自のカーニングテーブルがあり、フォントのリリースごとに多少異なることがあるということです。異なるタイプのファウンドリが人気のある書体(Futura、Times、Gill Sansなど)の独自のバージョンを公開し、独自のバリエーションの文字のアウトラインとカーニングを使用しているという事実。これらすべて、そしてOpenTypeフォントで一般的に利用できるような合字、追跡、カスタムカーニング、自動文字代替、またはスワッシュについても触れていません。

ですから、あなたが質問している種類の測定ツールは理論的には作ることができますが、実際にそれを実用的にするために必要な実用性は、おそらくそれが高価すぎて努力に値しないでしょう。

ただし、すべてが失われるわけではありません。すべてのデザインアプリケーションには、ページ上のあらゆるものを測定するために使用できる測定ツールの形式があります(WillAdamsが指摘したように、特にLaTeXの場合はタイプ用)。アドビアプリケーションでは、スポイトツールにネストされています。マニュアルですが、動作します。


詳細な回答ありがとうございます。私の頭の上では、あなたが何をしているのかを理解することは完全に難しくはありませんが。
mrbungle

1
頭に浮かんだように見える場合は、慣れていない用語を個別に拾ってググってみてください。用語は、あらゆる主題に慣れ親しみやすくなるための戦いの90%です。
アランギルバートソン2014年

確かに。私はこのポジションに投入されたdba /レポートライターです。ただし、このトピックは個人的なプロジェクトのみを対象としています。:-)
mrbungle 2014年

その場合は、以下をご覧ください。pytex.org
WillAdams

私もチェックしてみます。面白そうで、個人的なサイドプロジェクトのためだけに知りすぎているかもしれませんね。いつも学ぶ!
mrbungle 2014年

1

これを行うには多くの方法があります。ここでは、エンジニアが問題にどのように取り組むかを示しています。重要なのは、このアプローチが他の多くの分野と多くの点で類似していることを示すことです。声に出してそれを列挙するのは退屈に思われ、このような単純なケースでは、頭の中で静かに行われます。これはメソッドを説明するだけです。

警告の長い説明。

ステージ1:ソリューションを定義する

  • 文字列の幅を取得します。
  • 特定のフォントを使用します。
  • 技術的に使用可能な方法で、人間の介入を最小限に抑えることが望ましい。
  • フォントエンコーディングの使用:不明な質問の説明、解決策に影響
  • 目的:不明な質問の説明、解決策に影響
  • 必要なツールの頻度:不明な質問の説明、頻繁に解決に影響する
  • バッチ処理が必要:不明な質問の説明、必要に応じてソリューションに影響
  • ユーザー入力:文字列とフォント?明確にする
  • 出力:自動化プロセスまたは手動使用?
  • 使用環境:どのオペレーティングシステム?不明は、明確化を尋ねる強くソリューションに影響を及ぼし
  • 単位:ピクセル、pt、インチ、mm?不明な質問の説明、解決策に影響

ご覧のとおり、回答が必要な未知の要素がたくさんあります。特に、クライアントに出荷できる優れたソリューションが必要な場合。常に問題を理解するよう努めてください。

ステージ2:文献(またはブレーンストーミング)でメソッドを検索する

最初の段階は、答えを出すことができるアプリケーションと方法をリストすることです:

Graphics applications (adobe has scripting api OK)
Page setters (TEX solution above)
Operating system (windows has methods for font metrics)
Manually parse fontfile (Infeasible, many formats in one need to implement a lot of routines)
postscript interpretters (solution known)
GUI toolkits (QT can do this)
Other Tookints (Graphing tools like Scipy have this info)

リストは十分な行くテストです

ステージ3:プロトタイプ(スケッチ)

ポストスクリプトを使用

Postscriptは既知の方法です。Postscriptの問題は、わずかに異なる効果があるため、これを行うためにどのエンジンを使用するかです。gohostscriptを使用して、次のバッチファイルが機能します。

:: usage stringWidth string systemfont
set "ps=(%1) /%2 findfont 12 scalefont setfont 0 0 moveto true charpath pathbbox pop exch pop exch sub pstack"
gswin64c -dQUIET -dBATCH -r1200 -dNODISPLAY -sFONTPATH=%windir%\fonts -c %ps%

Windowsで動作し、ポイント幅を返します。おそらくいくつかの変更を加えてLinuxでも動作します。境界制約は不明です。説明を求めます。問題:charエンコーディングを修正するか、中間のpsファイルを使用する必要があります。それ以外の場合、間隔のある文字列は機能しません。厄介なエンコーディングの問題。西洋の言語を使用している場合は対処できます。

Illustratorとjavasciptの使用

イラストレーターを手動で使用:パスの輪郭を描く場合、GUIの幅ボックスでテキストの幅を読み取ることができます。これが理解されたら、スクリプト化できます。

これはJavaScriptで体系化できます。

#target illustrator

var doc = app.documents.add();
var text = doc.textFrames.add();
text.contents = "test";
text.textRange.characterAttributes.size = 12;
text.textRange.characterAttributes.textFont = textFonts.getByName("Onyx");

var outline = text.createOutline();
var bounds = outline.geometricBounds
var width = bounds[1]-bounds[3]
alert(width+" pt")

動作しますが、Illustratorが必要かどうかは問題ではありません。必要に応じて、一部の技術的な側面について結果を絞り込むことができます。VBやapplescriptで、またはC、C ++、python、perl、rubyなどでCOMを使用して同じことを行うことができます。必要に応じて、コマンドラインからも使用できます。

そして、上記のいくつかがテストされた後、改良のために1つを選択します。

PS: opは明確化できますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.