2014 dxdy logo

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

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




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

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

 
 
 
 Re: Существуют ли символьные функции в ТеХ/LaTeX?
Сообщение01.01.2010, 21:09 
У меня есть один приятель, который любит программировать в ТеХе. Да и я сам когда-то (лет десять назад) этим баловался.

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

 
 
 
 Re: Существуют ли символьные функции в ТеХ/LaTeX?
Сообщение01.01.2010, 22:46 
А чуть поподробнее, как интегрировать сторонний код?

 
 
 
 Re: Существуют ли символьные функции в ТеХ/LaTeX?
Сообщение01.01.2010, 23:27 
Аватара пользователя
vezyolka в сообщении #276938 писал(а):
А чуть поподробнее, как интегрировать сторонний код?

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

(Оффтоп)

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

 
 
 
 Re: Существуют ли символьные функции в ТеХ/LaTeX?
Сообщение02.01.2010, 00:59 
Сдаётся мне, что если сделать как Вы предлагаете, то переносимость исходника от этого ощутимо пострадает. Если отправить ЭТО типа в редакцию то кто и как там будет запускать скриптовый препроцессор.... Может я и ошибаюсь, но кажется что тогда почти с тем же успехом можно предложить просто в текстовом редакторе позаменять все по шаблону.... и так каждый раз во всем документе когда надо что-то поменять...

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

 
 
 
 Re: Существуют ли символьные функции в ТеХ/LaTeX?
Сообщение02.01.2010, 12:10 
Аватара пользователя
vezyolka в сообщении #276960 писал(а):
Если отправить ЭТО типа в редакцию то кто и как там будет запускать скриптовый препроцессор

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

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

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

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

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

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

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

 
 
 
 Re: Существуют ли символьные функции в ТеХ/LaTeX?
Сообщение12.01.2010, 09:56 
Кстати, для того, чтобы \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 
Аватара пользователя
Захотелось проверить:\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 
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 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group