2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Появляется нежелательный пробел
Сообщение21.07.2024, 15:05 


21/07/24
1
Передо мной стоит задача: подкрашивать серым названия клавиш в обозначениях хоткеев. Я это реализовал через рекурсию, подобную приведённой в The TeXbook в самом конце 20-й главы и пакет color. Документ компилировал с помощью pdflatex из терминала. Это работает, но если вызвать команду \hk в середине абзаца, то появляется совершенно лишний пробел. Минимальный пример кода приведён с комментариями:

код: [ скачать ] [ спрятать ]
Используется синтаксис LaTeX
\documentclass[14pt]{report}
\RequirePackage[dvipsnames, usenames]{color}

\begin{document}
\def\hotKeyColor#1{
            \ifx#1\end % выходим из рекурсии, записывая текущее слово в бокс с фоном
                \def\next{\edef\hkstr{\hkstr\noexpand\colorbox{Gray}{\thisKey}}} % без завершающего плюса
             \else
                \let\next=\hotKeyColor % назначаем следующий шаг рекурсии
                \if#1+ % если попался плюс, то запишем в итоговую строку название клавиши
                  \edef\hkstr{\hkstr\noexpand\colorbox{Gray}{\thisKey}+}
                  \def\thisKey{} % обнулим название
                \else
                  \edef\thisKey{\thisKey#1} % добавляем текущий токен в название
                \fi
             \fi \next} % идём на следующий уровень рекурсии
\def\hk#1{{\def\hkstr{} \def\thisKey{} % создаём команды для хранения строки вывода и текущего слова
            \hotKeyColor#1\end \hkstr % вызываем рекурсивную ф-цию, а затем выводим результат
            }}

\hk{Ctrl+Alt+F4}txt. % здесь порядок, Ctrl начинается сразу после абзацного отступа

txt.\hk{Ctrl+Alt+F4}txt. % а тут после txt. появляется пропуск примерно в полторы длины от сочетания
\end{document}


Как можно избавиться от лишнего клея во второй строке итогового файла?

 Профиль  
                  
 
 Re: Появляется нежелательный пробел
Сообщение21.07.2024, 15:31 


27/11/10
207
Это из-за лишних пробелов и переносов строк. Надо расставить знаки %
Используется синтаксис LaTeX
\def\hotKeyColor#1{%
    \ifx#1\end % выходим из рекурсии, записывая текущее слово в бокс с фоном
    \def\next{\edef\hkstr{\hkstr\noexpand\colorbox{Gray}{\thisKey}}}% без завершающего плюса
    \else
    \let\next=\hotKeyColor% назначаем следующий шаг рекурсии
    \if#1+% если попался плюс, то запишем в итоговую строку название клавиши
    \edef\hkstr{\hkstr\noexpand\colorbox{Gray}{\thisKey}+}%
    \def\thisKey{}% обнулим название
    \else
    \edef\thisKey{\thisKey#1}% добавляем текущий токен в название
    \fi
    \fi \next} % идём на следующий уровень рекурсии
\def\hk#1{{\def\hkstr{}\def\thisKey{}% создаём команды для хранения строки вывода и текущего слова
    \hotKeyColor#1\end\hkstr% вызываем рекурсивную ф-цию, а затем выводим результат
}}

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

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



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

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


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

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