LINUX.ORG.RU

Появляется нежелательный пробел при вёрстке в latex

 , ,


0

2

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

\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}

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

Перемещено hobbit из general

Практически после всех закрывающих фигурных скобок внутри определения, а заодно еще и после \if#1+ надо убрать пробелы/возвраты каретки:

\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}
TeopeTuK ★★★★★
()

\documentclass[14pt]{report}

Я, может, чего-то пропустил, а давно report научился в 14pt? Мне казалось, для этого extreport есть.


\RequirePackage

Может, \usepackage?

А вообще, зачем такая мешанина латеха с голым техом?


Передо мной стоит задача: подкрашивать серым названия клавиш в обозначениях хоткеев

\usepackage{keystroke}
…
\Ctrl+\keystroke{A}

Оно, конечно, не подкрашивает, но делает ещё нагляднее

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

А вообще, зачем такая мешанина латеха с голым техом?

Так ТС же говорил:

Я это реализовал через рекурсию, подобную приведённой в The TeXbook в самом конце 20-й главы

Копает явно глубоко ;)

keystroke

По мне, так menukeys симпатичнее.

Оно, конечно, не подкрашивает,

Для этого есть tcbox из tcolorbox

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

Я, может, чего-то пропустил

Ничего не пропустил, report и не умеет. В итоге нужного результата достиг с b5paper.

Может, \usepackage?

Как получилось так и работает. Не понял почему, но с юзом не заводится. Собственно чем Requre плох?

зачем такая мешанина латеха с голым техом

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

но делает ещё нагляднее

И уродливее. Мне не нравится, как выглядит оформление от этого пакета.

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

а голый тех весьма беден,

Так поэтому я и дал наводку на tcolorbox. Один из хорошо документированных пакетов.

На основе примера из его документации:

\documentclass[12pt]{report}
\usepackage{tcolorbox}

\newtcbox{\hk}[1][red]{on line,
arc=7pt,colback=#1!10!white,colframe=#1!50!black,
before upper={\rule[-1pt]{0pt}{10pt}},boxrule=1pt,
boxsep=0pt,left=6pt,right=6pt,top=2pt,bottom=2pt}

\begin{document}

\hk{Ctrl}+\hk[green]{Alt}+\hk[blue]{F4}txt.

txt.\hk[black]{Ctrl+Alt+F4}txt.

\end{document}

Рекомендую просмотреть его документацию.

beamer + TikZ + tcolorbox + minted = офигенные презентации

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

Вся суть моих плясок лишь в том, чтоб разделить строку по плюсам. Приведённую же конструкцию для требуемого результата я буду пихать в свой велосипед на место \colorbox{Gray}{\thisKey}. То есть без выигрыша почти. Мне подходит menukeys.

LemeRus
() автор топика