2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Существуют ли символьные функции в ТеХ/LaTeX?
Сообщение01.01.2010, 20:53 


01/01/10
5
С ТеХом знакома относительно неплохо, при написании своих команд необходимых мне для оформления одного из документов возникла необходимость в следующих символьных функциях:
1) Получить первый символ аргумента (первую букву слова; в общем случае получить подстроку аргумента длиной n символов начиная с позиции m).
2) Преобразовать все буквы аргумента к нижнему регистру
3) Преобразовать все буквы аргумента к верхнему регистру

Как это реализовать средствами ТеХа/LаТеХа или как включить сторонний код в команды LаТеХа или какие есть еще способы осуществить необходимое?

 Профиль  
                  
 
 Re: Существуют ли символьные функции в ТеХ/LaTeX?
Сообщение01.01.2010, 21:09 
Заслуженный участник


11/05/08
32166
У меня есть один приятель, который любит программировать в ТеХе. Да и я сам когда-то (лет десять назад) этим баловался.

Но давно понял, что это -- извращение. Все подобные трюки следует делать внешними средствами. Благо ТеХовский код открыт (чем в первую очередь и замечателен). Пишем (на любом разумном языке) простенькую программку...

 Профиль  
                  
 
 Re: Существуют ли символьные функции в ТеХ/LaTeX?
Сообщение01.01.2010, 22:46 


01/01/10
5
А чуть поподробнее, как интегрировать сторонний код?

 Профиль  
                  
 
 Re: Существуют ли символьные функции в ТеХ/LaTeX?
Сообщение01.01.2010, 23:27 
Заслуженный участник
Аватара пользователя


03/06/09
1497
vezyolka в сообщении #276938 писал(а):
А чуть поподробнее, как интегрировать сторонний код?

Ничего интегрировать не надо. Пишите простенький (или не очень) парсер-препроцессор и натравливаете его на TeX-исходники, который сделает там всё то, что вы хотите.

(Оффтоп)

Такие препроцессоры лучше писать на m4, либо на скриптовых языках типа perl.

 Профиль  
                  
 
 Re: Существуют ли символьные функции в ТеХ/LaTeX?
Сообщение02.01.2010, 00:59 


01/01/10
5
Сдаётся мне, что если сделать как Вы предлагаете, то переносимость исходника от этого ощутимо пострадает. Если отправить ЭТО типа в редакцию то кто и как там будет запускать скриптовый препроцессор.... Может я и ошибаюсь, но кажется что тогда почти с тем же успехом можно предложить просто в текстовом редакторе позаменять все по шаблону.... и так каждый раз во всем документе когда надо что-то поменять...

 Профиль  
                  
 
 Re: Существуют ли символьные функции в ТеХ/LaTeX?
Сообщение02.01.2010, 11:38 
Заслуженный участник
Аватара пользователя


18/05/06
13438
с Территории
Уверяю Вас, если отправить в редакцию чисто ТеХовский документ с подобными сугубо нестандартными функциями, там будут шокированы не менее.

 Профиль  
                  
 
 Re: Существуют ли символьные функции в ТеХ/LaTeX?
Сообщение02.01.2010, 12:10 
Заслуженный участник
Аватара пользователя


03/06/09
1497
vezyolka в сообщении #276960 писал(а):
Если отправить ЭТО типа в редакцию то кто и как там будет запускать скриптовый препроцессор

А кто мешает вам отправить уже готовый результат?
vezyolka в сообщении #276960 писал(а):
с тем же успехом можно предложить просто в текстовом редакторе позаменять все по шаблону.... и так каждый раз во всем документе когда надо что-то поменять...

В отличии от редактора, обработку препроцессором можно загнать в Makefile (или .bat-файл, если в Windows), так что работа будет совершенно прозрачная.

 Профиль  
                  
 
 Re: Существуют ли символьные функции в ТеХ/LaTeX?
Сообщение04.01.2010, 09:02 
Аватара пользователя


01/02/09
206
Цитата:
С ТеХом знакома относительно неплохо, при написании своих команд необходимых мне для оформления одного из документов возникла необходимость в следующих символьных функциях:
1) Получить первый символ аргумента (первую букву слова; в общем случае получить подстроку аргумента длиной n символов начиная с позиции m).
2) Преобразовать все буквы аргумента к нижнему регистру
3) Преобразовать все буквы аргумента к верхнему регистру

Редакторы, поддерживающие регулярные выражения (Emacs, Vim) вам помогут, также можно использовать sed или написать простенький парсер, как уже советовали. Если вы счастливая обладательница Linux, то ближайшая к вам инструкция по регуляркам --- man perlre.

 Профиль  
                  
 
 Re: Существуют ли символьные функции в ТеХ/LaTeX?
Сообщение04.01.2010, 10:25 
Заслуженный участник
Аватара пользователя


14/02/07
2648
Для LaTeX'a:

1) есть мощный пакет xstring, делает что угодно со строками, например, для Вашего запроса подойдет команда \StrMid.

2),3) \uppercase, \lowercase или (лучше) \MakeUppercase, \MakeLowercase.

 Профиль  
                  
 
 Re: Существуют ли символьные функции в ТеХ/LaTeX?
Сообщение12.01.2010, 09:56 


04/02/08
325
Буково
Кстати, для того, чтобы \uppercase и \lowercase работали с русскими буквами, надо исправить их \uccode и \lccode. Пример:
Код:
\documentclass[a4paper,12pt,twoside]{article}
\usepackage{/home/eddy/ed}
\begin{document}
\newcount\CNT
\newcount\LTRR
\def\UL#1{\CNT=#1\advance\CNT by 32
\lccode#1=#1 \uccode#1=\CNT \lccode\CNT=#1 \uccode\CNT=\CNT}
\def\ZZZ#1#2.{\somethingwith{#1}\ifx#2\null\else\ZZZ #2.\fi} % поочередно выдирает токены из аргумента
\LTRR=192
\loop \UL{\LTRR} \advance\LTRR by1 \ifnum \LTRR<224 \repeat
\lccode`\ё=`\ё\lccode`\Ё=`\ё\uccode`\ё=`\Ё\uccode`\Ё=`\Ё

ПРОВЕРКА проверка TEST test

\lowercase{ПРОВЕРКА проверка TEST test ёёё ЁЁЁ}

\uppercase{ПРОВЕРКА проверка TEST test ёёё ЁЁЁ}
\end{document}

P.S. Это для кодировки КОИ8-Р.

Команда \ZZZ разбивает свой аргумент (до символа точки) на токены, вместо команды \somethingwith вставьте свою, например, если сделать так:
Код:
\def\ZZZ#1#2.{\hbox{#1 }\ifx#2\null\else\ZZZ #2.\fi}
\ZZZ Приветствую Вас.

то фраза "Приветствую Вас" будет записана вертикально. Я использовал такой вариант для генерации вертикальных и наклонных подписей.

P.S. Почитайте Кнута "Все про ТеХ" - очень полезная книга. Если раза 3-4 проштудируете, откроете для себя много интересных трюков.

 Профиль  
                  
 
 Re: Существуют ли символьные функции в ТеХ/LaTeX?
Сообщение18.01.2010, 01:26 
Заблокирован по собственному желанию
Аватара пользователя


18/05/09
3612
Захотелось проверить:\def\ZZZ#1#2.{\hbox{#1 }\ifx#2\null\else\ZZZ #2.\fi}
\color{blue}\ZZZ Приветствую Вас.Проверил и обалдел. О, сколько нам открытий чудных ...! Над тем, от чего одно на другое наползло, пока даже и не задумываюсь. Ну, и про пропавший пробел тоже. Чисто sitting and balding. Спасибо!

-- Пн янв 18, 2010 01:33:29 --

Да никто ни на кого не наползло, просто такой синенький "символ" в строчку затесался!

 Профиль  
                  
 
 Re: Существуют ли символьные функции в ТеХ/LaTeX?
Сообщение18.01.2010, 11:12 


04/02/08
325
Буково
AKM в сообщении #281332 писал(а):
Захотелось проверить:\def\ZZZ#1#2.{\hbox{#1 }\ifx#2\null\else\ZZZ #2.\fi}
\color{blue}\ZZZ Приветствую Вас.Проверил и обалдел. О, сколько нам открытий чудных ...! Над тем, от чего одно на другое наползло, пока даже и не задумываюсь. Ну, и про пропавший пробел тоже. Чисто sitting and balding. Спасибо!

-- Пн янв 18, 2010 01:33:29 --

Да никто ни на кого не наползло, просто такой синенький "символ" в строчку затесался!


Чтобы пробелы тоже отображались, можно сделать так:
Код:
\catcode`\ =\active
\gdef\ZZZ#1#2.{\hbox{#1}\ifx#2\null\else\ZZZ#2.\fi} % поочередно выдирает токены из аргумента

\ZZZ Приветствую Вас.


\catcode`\ =\active
\gdef\ZZZ#1#2.{\hbox{#1}\ifx#2\null\else\ZZZ#2.\fi} % поочередно выдирает токены из аргумента

\ZZZ Приветствую Вас.

-- Пн янв 18, 2010 11:24:02 --

P.S. И с моим скриптом работает:
Код:
formulator "\vbox{\catcode\`\ =\active\gdef\ZZZ#1#2.{\hbox{#1}\ifx#2\null\else\ZZZ#2.\fi}\ZZZ Приветствую Вас.}"

Получается картинка:
Изображение

Сам скрипт:
Код:
#!/bin/sh
prefix="tmp_$$"
output=$(date +%y.%m.%d_%H:%M:%S.png)
tex="$prefix.tex"
cat > $tex << EOF
\documentclass[12pt]{minimal}
\usepackage[koi8-r]{inputenc}   % Классическая кодировка
\usepackage[english,russian]{babel}   % Правила переноса слов
\usepackage[intlimits]{amsmath}   % Мат. команды
\usepackage{amsfonts}      % Шрифты
\usepackage{amssymb}      % Спец. символы
\usepackage{wasysym}      % Для астрономических символов типа знаков зодиака
\parindent=0pt
\begin{document}
\setbox0=\hbox{
EOF
echo $* >> $tex
cat >> $tex << EOF
}
\textheight=\ht0
\textwidth=\wd0
\advance\textheight by \dp0
\advance\textwidth by 2em
\copy0
\end{document}
EOF
latex $tex
dvipng -D 600 $prefix.dvi -o $output
rm -f $prefix*

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group