Я использую LaTeX с Emacs и хочу иметь возможность передавать слова того, что я пишу, в команду оболочки. (В качестве примера я использую xargs echo
.)Ограничения на привязку к объекту и AUCTeX
Для этой цели я определила интерактивную функцию Elisp:
(defun echo()
(interactive)
(let ((bnds (bounds-of-thing-at-point 'word)))
(shell-command-on-region (car bnds) (cdr bnds) "xargs echo")))
Это хорошо работает для большинства буферов, но не для латексных буферов, используя замок шрифта AucTeX. Большинство слов снова работают нормально, но не слова с кавычками на границе их слов.
Минимальный пример:
\documentclass{article}
\usepackage{german}
\begin{document}
test "`Test"'
\end{document}
Во-первых, так же, как доказательство концепции: Если точка находится на test
в моем LaTeX буфере, и я стараюсь мою команду (echo
) я получаю test
как результат в минибуфере. (Как и ожидалось.)
Теперь проблема: если точка указана на Test
, и я использую свою команду, xargs жалуется на несогласованные двойные кавычки.
Причина этого в том, что командная оболочка оболочки не передает Test
команде оболочки, а Test"'
. Это я могу проверить, используя код elisp xargs -0
. Затем я получаю результат в минибуфере:
Test"'
Проблема возникает из-за блокировки шрифта AUCTeXs. (Что я хочу использовать!) Если я устанавливаю font-latex-quotes
к nil
, моя команда отлично работает (она возвращает Test
в минибуфере), но, конечно, цитируемый содержание не будет fontified ...
Любые идеи, как я мог либо изменить мой код elisp для работы с AUCTeX или настроить AUCTeX так, чтобы он выделял цитируемый контент, но сохранял правильные границы слов?
Не могли бы вы уточнить, что работает, а что нет? Должны ли '' test "и' "Test" 'цитироваться по-другому? – Chris
В обоих случаях я хотел бы получить слово без кавычек. Это работает, конечно, для «теста», поскольку в моем минимальном примере нет кавычек. Это не работает для «Тест», который имеет кавычки вокруг него в моем минимальном примере. (Чтобы быть точным, у него есть код LaTeX для немецких кавычек вокруг него, и по этой причине простая двойная кавычка в конце.) – newtothis
Ваше описание нечеткое. Приведите конкретные примеры использования вашей команды 'echo' на разных позициях конкретного текста примера - в каких случаях вы действительно пытаетесь общаться. Во-вторых, sexp в точке возвращает строку, если это sexp в точке. Если вы не хотите, чтобы он возвращал строку, тогда подумайте о поиске слова в точке или о том, что вы действительно хотите. Или, если вы действительно хотите поднять строку в точке, а затем использовать границы своего содержимого, не считая символов '' ', а затем отрегулировать возвращаемые границы. Никто не сможет вам помочь, пока вы не скажете, что вам нужно. – Drew