2014 dxdy logo

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

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




 
 Появляется нежелательный пробел
Сообщение21.07.2024, 15:05 
Передо мной стоит задача: подкрашивать серым названия клавиш в обозначениях хоткеев. Я это реализовал через рекурсию, подобную приведённой в 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 
Это из-за лишних пробелов и переносов строк. Надо расставить знаки %
Используется синтаксис 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 ] 


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