Bất kỳ hệ thống tự động để tính độ dài tuyến tính của một chữ cái trong một từ hoặc cụm từ?


7

Tôi có thể thoát khỏi câu hỏi này nhưng có cách nào để có được độ dài tuyến tính của một chữ cái hoặc từ. Đó là, nếu bạn lấy từ "siêu" và đo đường viền bên ngoài của các chữ cái bạn sẽ đo. Có cái gì đó ở ngoài đó sẽ cho tôi biết phép đo này nếu tôi đưa ra phông chữ và kích thước phông chữ? Tôi là một tân binh ở đây nên hãy nhẹ nhàng. cảm ơn trước.

Câu trả lời:


6

Việc này rất đơn giản khi sử dụng TeX / LaTeX (mặc dù bạn sẽ muốn sử dụng phiên bản mới hơn như xetex hoặc luatex để có thể dễ dàng truy cập phông chữ OpenType và TrueType):

\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}

sẽ xuất ra: 0,2060in

Các tính năng OpenType được hỗ trợ:

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

đầu ra nào:

0,8425in

0,7911in


1
Khi nói về các thay thế theo ngữ cảnh, các chữ ghép tùy ý và các loại tính năng / thay thế OpenType, tôi không biết rằng "tầm thường" là từ mà tôi sử dụng ... :) [BTW: Chúng ta không gặp nhau trên InDesign liệt kê, hoặc bạn là một người hâm mộ LaTeX khác cùng tên?]
Alan Gilbertson

1
Bạn muốn bật tính năng OpenType nào --- tất cả đều hoạt động và có thể truy cập được (cho phép các tùy chọn trong chương trình được viết sẵn đủ điều kiện là tầm thường, không). Có, tôi là người di chúc từ danh sách InDesign.
WillAdams

<cười toe toét> Chỉ có một người đam mê thực sự, được trả tiền đầy đủ, có thể gọi 14 dòng mã là "tầm thường", vì vậy tôi cho rằng trên cơ sở đó, việc thêm các tham số OTF cần thiết sẽ đủ điều kiện tương tự.
Alan Gilbertson

Thật tuyệt khi gặp bạn ở đây. Bạn có một số lĩnh vực kiến ​​thức không được thể hiện nhiều ở đây nếu không (nói LaTeX là một trường hợp tốt).
Alan Gilbertson

@AlanGilbertson 14 dòng có thể khó nhưng không khó nếu chúng không có hiệu ứng thuật toán và được sao chép từ một tài liệu, khi được sử dụng trong chính xác phạm vi chúng được thiết kế. Số dòng không chỉ đơn giản là nhập hình ảnh.
joojaa

3

Về các công cụ thường có, không, sẽ không có gì lấy [phông chữ ngẫu nhiên] [kích thước] và [ký tự] làm đầu vào và nhổ ra một chiều dài. Có một số lý do tại sao điều này sẽ luôn luôn đúng, nhưng lý do chính là mọi phông chữ bình thường (không phải là đơn cách ) đều có bảng k sâu riêng có thể và thường thay đổi phần nào từ một bản phát hành phông chữ tiếp theo, không đề cập đến thực tế là các xưởng đúc khác nhau xuất bản các phiên bản kiểu chữ phổ biến của riêng họ (Futura, Times, Gill Sans, v.v.), với các biến thể riêng của họ trong các phác thảo nhân vật và k sâu sắc. Tất cả điều đó, và chúng tôi thậm chí không đề cập đến chữ ghép, theo dõi, ký tự tùy chỉnh hoặc ký tự thay thế hoặc dấu gạch chéo như thường có sẵn trong phông chữ OpenType.

Vì vậy, mặc dù về mặt lý thuyết, một công cụ đo lường mà bạn đang hỏi có thể được tạo ra, nhưng thực tế liên quan đến việc làm cho nó thực sự hữu ích có thể sẽ khiến nó trở nên quá đắt để xứng đáng với nỗ lực.

Tất cả không bị mất, mặc dù. Mỗi ứng dụng thiết kế đều có một số dạng công cụ đo lường (thậm chí, như WillAdams chỉ ra, cụ thể cho loại trong trường hợp LaTeX) có thể được sử dụng để đo bất cứ thứ gì trên trang. Trong các ứng dụng Adobe, nó được tìm thấy lồng nhau với công cụ Eyedropper. Đó là thủ công, nhưng nó hoạt động.


Cảm ơn các câu trả lời chi tiết. Mặc dù trong đầu tôi không hoàn toàn khó hiểu những gì bạn đang làm.
mrbungle

1
Nếu nó có vẻ trên đầu của bạn, chỉ cần chọn các thuật ngữ riêng lẻ mà bạn không quen thuộc và google chúng. Thuật ngữ là 90% của cuộc chiến trong việc làm cho thoải mái và có thể trở nên dễ dãi với bất kỳ chủ đề nào.
Alan Gilbertson

Thật. Tôi là một dba / người viết báo cáo bị ném vào tư thế. Chủ đề này tuy nhiên chỉ dành cho một dự án cá nhân. :-)
mrbungle

Trong trường hợp đó, bạn sẽ muốn xem qua: pytex.org/texd
WillAdams

Tôi cũng sẽ kiểm tra xem, có vẻ thú vị và có lẽ tôi sẽ biết quá nhiều về một dự án phụ cá nhân, lol. Luôn luôn học hỏi!
mrbungle

1

Có nhiều cách điều này có thể được thực hiện. Tôi đang chỉ ra cách một kỹ sư sẽ tiếp cận vấn đề. Vấn đề là chỉ ra rằng cách tiếp cận này theo nhiều cách tương tự với nhiều lĩnh vực khác. Việc liệt kê nó có vẻ nhàm chán và trong những trường hợp đơn giản như thế này, nó được thực hiện một cách âm thầm trong đầu. Điều này chỉ minh họa phương pháp.

Cảnh báo giải thích dài.

Giai đoạn 1: Xác định giải pháp

  • Lấy chiều rộng của chuỗi.
  • Sử dụng phông chữ cụ thể.
  • Tốt nhất là theo cách có thể sử dụng về mặt kỹ thuật để sự can thiệp tối thiểu của con người.
  • Sử dụng mã hóa phông chữ: Không rõ yêu cầu làm rõ, ảnh hưởng đến giải pháp
  • Mục đích: Không biết làm rõ, ảnh hưởng đến giải pháp
  • Mức độ thường xuyên của công cụ cần thiết: Không biết yêu cầu làm rõ, ảnh hưởng đến giải pháp nếu thường xuyên
  • cần xử lý hàng loạt: Không rõ yêu cầu làm rõ, ảnh hưởng đến giải pháp nếu cần
  • đầu vào của người dùng: chuỗi cộng với phông chữ? Định hướng
  • đầu ra: cho một quá trình tự động hoặc sử dụng thủ công?
  • Sử dụng môi trường: Hệ điều hành nào? Không biết hỏi làm rõ, ảnh hưởng mạnh đến giải pháp
  • đơn vị: Pixels, pt, inch hay mm? Không biết hỏi làm rõ, ảnh hưởng đến giải pháp

Như bạn có thể thấy có rất nhiều điều chưa biết cần phải trả lời. Đặc biệt nếu một người muốn có một giải pháp tốt có thể được chuyển đến khách hàng. Luôn luôn phấn đấu để hiểu vấn đề.

Giai đoạn 2: Tìm kiếm các phương pháp trong văn học (hoặc động não)

Giai đoạn đầu tiên là liệt kê các ứng dụng và phương pháp có thể mang lại câu trả lời:

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)

Danh sách này là đủ để đi kiểm tra

Giai đoạn 3: Nguyên mẫu (phác họa)

sử dụng bài viết

Postcript là một phương pháp đã biết, vấn đề với postcript là công cụ nào bạn sử dụng để làm điều này vì chúng có hiệu ứng hơi khác nhau. Sử dụng gohostscript tập tin lô sau đây hoạt động:

:: 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%

Hoạt động trên windows, trả về độ rộng điểm, có thể cũng hoạt động linux với một vài thay đổi. Hạn chế biên giới không rõ. Hỏi làm rõ. Sự cố: cần sửa mã hóa char hoặc sử dụng tệp ps trung gian. Mặt khác, không có chuỗi khoảng cách hoạt động. Các vấn đề mã hóa khó chịu, có thể quản lý nếu sử dụng các ngôn ngữ phương Tây.

Sử dụng Illustrator và javascipt

sử dụng vẽ minh họa bằng tay: Nếu bạn phác thảo đường dẫn, bạn có thể đọc chiều rộng của văn bản trong hộp chiều rộng trong gui. Một khi điều này được hiểu nó có thể được viết kịch bản.

Điều này có thể được mã hóa trong 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")

Hoạt động, nhưng cần Illustrator có thể hoặc không thể là một vấn đề. Kết quả có thể được tinh chỉnh cho một số khía cạnh kỹ thuật nếu cần thiết. Điều tương tự có thể được thực hiện trong VB hoặc applescript, hoặc sử dụng COM với C, C ++, python, perl, ruby, v.v. Cũng có thể được sử dụng dòng lệnh máng nếu cần thiết.

Và sau khi một số trong những người ở trên được thử nghiệm, chọn một để sàng lọc.

PS: Có thể làm rõ?

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.