LINUX.ORG.RU

Как вставлять слова в LaTeX ?

 , ,


0

2

Я пишу некий текст, в котором упоминаю различные объекты. Это довольно сложные объекты, у которых в реальном мире существует много разновидностей (компьютеры, машины, вычислительные машины, электронно-вычислительные машины, электронно-цифровые вычислительные машины).

Для целей краткости статьи мне бы хотелось использовать наиболее короткое название из всех синонимов, это ведь логично? Написать в начале - бывает такое и такое, далее в тексте будет использоваться такое, которое будет называться так-то.

Но на момент начала написания текста я ещё не знаю, какие варианты объектов я буду рассматривать, а какие нет. Возможно позже обнаружатся какие-то новые варианты, и надо будет удлиннить повсюду используемое словосочетание, чтобы начать различать уже используемый вариант и новый.

Для того, чтобы такая операция была легко возможна, я бы хотел в документе составить толковый словарь, в котором бы записал все названия, дал им определения, а также определил бы соответствующие понятиям макросы.

Т.е. везде по тексту я пишу /machine, но когда припрёт (и захочется вписать в документ дополнительно гидравлические аналоговые счётные устройства), хочу чтобы была возможность вместо макроса /machine увидеть не просто «компьютер», а словосочетание «электронно-цифровая вычислительная машина», причём с учётом падежей в том месте куда это будет вставлено.

См. ранее: LaTeX: как реализовать склонение слова?

Что скажете?

★★★

Последнее исправление: Shushundr (всего исправлений: 7)

Наверняка есть какой-нибудь подходящий пакет для этого случая (типа glossaries или что-нибудь в этом роде). Но можно и руками быстро соорудить:

\documentclass{article}
\usepackage{ifthen}
\usepackage{fontspec}
\setmainfont{CMU Serif}
\usepackage[russian]{babel}
\usepackage{xparse}

\DeclareDocumentCommand{\defcases}{mmmmmmm}{%
  \newcommand{#1}[1]{%
    \ifthenelse{\equal{##1}{n}}{% nominative
      #2%
    }{%
      \ifthenelse{\equal{##1}{g}}{% genitive
        #3%
      }{%
        \ifthenelse{\equal{##1}{d}}{% dative
          #4%
        }{%
          \ifthenelse{\equal{##1}{a}}{% accusative
            #5%
          }{%
            \ifthenelse{\equal{##1}{i}}{% instrumental
              #6%
            }{%
              \ifthenelse{\equal{##1}{p}}{% prepositional
                #7%
              }{%
                \GenericError{}{Incorrect case}{Case should be one of n, g, d, a, i, p}}}}}}}}}

\defcases{\machine}{машина}{машины}{машине}{машину}{машиной}{машине}

\begin{document}
\begin{description}
  \item[Именительный] \machine{n}
  \item[Родительный] \machine{g}
  \item[Дательный] \machine{d}
  \item[Винительный] \machine{a}
  \item[Творительный] \machine{i}
  \item[Предложный] о \machine{p}
\end{description}
\end{document}
TeopeTuK ★★★★
()
Ответ на: комментарий от TeopeTuK

существительные не только по падежам изменяются (ещё по родам и числам, а падежей восемь - местный и звательный). В словосочетания не только существительные встречаются, но и прилагательные (и наверное и другие части речи). Словосочетания не комбинируются из отдельных слов и придётся их описывать специально тоже во всех формах.

Shushundr ★★★
() автор топика
Ответ на: комментарий от Shushundr

Существительные по родам не меняются. Дополнительные падежи встречаются очень редко (но можешь и их добавить, конечно же). А для множественного числа можно сделать и так: \defcase{\machines}{машины}{машин}.... И со словосочетаниями, увы, придется перечислять все падежи, я не думаю, что есть возможность автоматизировать эту работу. Разве что как-нибудь hunspell задействовать.

TeopeTuK ★★★★
()

причём с учётом падежей в том месте куда это будет вставлено

Что скажете?

Что это задача не для LaTeX, а для нейросетки.

С другой стороны, что тебе мешает сразу указывать в нужном падеже и т.п.? Типа как уже предложили или даже тупо \machine, \machinam? Всё равно проще поправить определения одном месте чем по всему тексту. Причём не надо сразу все варианты перечислять, можно добавлять по мере написания текста.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от no-such-file

А словарь чем редактировать? Поставил себе программу stardict, так она вроде только на отображение работает, а не на редактирование словарей.

Shushundr ★★★
() автор топика
Ответ на: комментарий от TeopeTuK

В данном конкретном случае — таки да, но стоит помнить, что в русском языке есть существительные т. наз. общего рода, как принадлежащие к первому склонению (коллега, тёзка, забияка, привереда), так и заимствованные несклоняемые (визави, протеже).

Bass ★★★★★
()
Ответ на: комментарий от no-such-file

Что это задача не для LaTeX, а для нейросетки.

Человеку надо просто составить глоссарий документа и соблюдать его. Потом, при изменении глоссария, можно будет пройтись автозаменой по всем падежам, когда постоянные грамматические категории совпадают. Если категории не совпадают («машина» → «станок»), придется прибегнуть к поиску и ручной редактуре. Чтобы меньше редактировать, желательно заранее согласовать терминологию с кем нужно.

Vidrele ★★
()
Ответ на: комментарий от Shushundr

Когда автоматизировать задачу дольше, чем решать руками, ее надо решать руками. Но допустим, ты всю жизнь работаешь с документами. Или стремишься сэкономить человекочасы в масштабах планеты.

Так или иначе, тебе следует копать в сторону NLP: как распарсить синтаксис, как определить словоформы. А потом разобраться, как заменять словоформы с модификацией контекста, когда у тебя есть согласование («эта машина» – «этот станок») или управление («поставлять книги» – «снабжать книгами»). Обязательно надо предусмотреть полуавтоматический режим, потому что анализаторы обязательно что-то напутают. Это должен быть или плагин текстового редактора/процессора, или отдельная утилита. LaTeX – крайне неудачно выбранный инструмент.

Vidrele ★★
()
Ответ на: комментарий от Vidrele

человекочасы в масштабах планеты

Вот, я про это. Ведь механизм даже не зависит от языка, он отражает работу мозга и речевого аппарата в принципе.

В любом языке надо формировать понятия, уточнять их по мере накопления знаний и с течением времени, значит тексты должны уточняться и меняться со временем.

Да тот же подростковый сленг, каждое поколение хочет выделяться и следовать модным трендам, вводит новые слова в обиход.

Если Latex неудачный, то чем именно? У нас вообще путей обработки текста не так чтобы много:
а) тот процессор, что для man (troff?)
б) info
в) TeX и производные
г) DocBook

Что ещё?

не будем считать
1) github markdown или wikipedia markdown
2) HTML + JavaScript

потому что первый слабый, второй предназначен для других целей.

Shushundr ★★★
() автор топика
Последнее исправление: Shushundr (всего исправлений: 3)
Ответ на: комментарий от Shushundr

И при чем тут языки разметки и их процессоры? Ладно еще LaTeX, который хоть и приспособлен для разметки, но является тьюринг-полным ЯП.

Копай в сторону NLP. Например, вот: https://realpython.com/nltk-nlp-python/

Vidrele ★★
()