Неожиданный символ возвышенного текста 3 что это такое

Обновлено: 21.11.2024

Это следующая версия плагина Emmet со значительно улучшенным интерфейсом для разработчиков и новыми функциями. Подробнее читайте ниже. Плагин в настоящее время находится на стадии бета-тестирования и может содержать ошибки.

Emmet – это набор инструментов для веб-разработчиков, позволяющий ускорить написание кода HTML и CSS.

С Emmet вы можете вводить выражения (аббревиатуры), похожие на селекторы CSS, и преобразовывать их во фрагменты кода одним нажатием клавиши. Например, эта аббревиатура:

… можно расширить до:

Возможности

Установка

  1. В палитре команд запустите команду Package Control: Install Package.
  2. В списке открытых пакетов найдите пакет Emmet и установите его.

Если вы не можете найти пакет Emmet на последнем шаге или установленный пакет не работает должным образом, перезапустите Sublime Text и повторите попытку

Раскрывающееся сокращение

Если вы использовали предыдущую версию подключаемого модуля Emmet, вы уже знаете, как расширять аббревиатуры: введите что-то вроде ul>li.items*4 и нажмите Tab или Ctrl-E . Хотя этот подход в целом работает, он имеет много недостатков:

  • Перехват клавиши Tab: Эммет привязывает клавишу Tab для расширения аббревиатур, поэтому пользователь не может вставить собственный фрагмент Sublime Text или поставить табуляцию сразу после слова, поскольку почти каждое слово может быть аббревиатурой для Эммета.
  • Нет предварительного просмотра расширенных аббревиатур: написание сложных аббревиатур становится методом проб и ошибок с действиями расширения/отмены/расширения.
  • Непредсказуемый результат: невозможно определить, что произойдет, когда вы нажмете клавишу Tab, она либо расширит аббревиатуру, вставит собственный фрагмент, либо просто выведет символ табуляции.

В этом подключаемом модуле расширитель аббревиатуры действует как поставщик автозаполнения и автоматически фиксирует аббревиатуру по мере ввода.

Когда вы начинаете вводить текст в поддерживаемом Emmet контексте (HTML, CSS, Slim и т. д.), Emmet определяет, что вы вводите что-то похожее на аббревиатуру, и добавляет подчеркивание, указывающее на захваченную аббревиатуру< /эм>. Когда захваченная аббревиатура становится сложной (например, содержит атрибуты или несколько элементов), вы будете видеть предварительный просмотр расширенной аббревиатуры каждый раз, когда внутри нее находится знак вставки. Нажмите клавишу Tab внутри захваченной аббревиатуры, чтобы развернуть ее, нажмите Esc, чтобы удалить пометку с аббревиатуры, чтобы вы могли использовать Tab для расширения исходных фрагментов ST или вставки символа табуляции.

Если у вас уже есть аббревиатура в документе и вы хотите ее расширить, переместите курсор в конец аббревиатуры и вызовите автозаполнение (по умолчанию Ctrl+Пробел), чтобы записать аббревиатуру:

Поддержка JSX

Убедитесь, что для синтаксиса вашего документа задан JSX, а не JavaScript

Написание аббревиатур Emmet в JSX немного сложно: в большинстве случаев вы ожидаете, что клавиша Tab расширит нативные фрагменты Sublime Text и будет использовать Emmet только для определенного контекста. Таким образом, захват аббревиатуры по умолчанию для каждой переменной или фрагмента может вас раздражать.

Чтобы решить эту проблему, Emmet использует аббревиатуры с префиксом в JSX: он будет захватывать и расширять аббревиатуру только в том случае, если перед ней стоит определенный символ(ы). По умолчанию это символ:

Emmet обнаруживает в JSX нотацию модуля в верблюжьем регистре: Foo.Bar будет расширен как вместо . Также поддерживаются атрибуты выражений: div[class=] .

Поддержка CSS

В CSS Sublime Text по умолчанию использует немного другое поведение автозаполнения: он отображает варианты завершения по умолчанию и не заполняет список вариантов заполнения по мере дальнейшего ввода, что не позволяет Эммету построить правильное динамическое завершение. Чтобы решить эту проблему, Emmet отображает предварительный просмотр аббревиатуры сразу после символа вставки как фантом:

Если вам не нравится встроенный предварительный просмотр для CSS, вы можете отключить его только для CSS:

  • Перейдите к пункту меню Настройки > Настройки пакета > Emmet > Настройки.
  • Установите для параметра abbreviation_preview значение "разметка", например "abbreviation_preview": "разметка" . Это позволит выполнять предварительный просмотр только для синтаксисов разметки (HTML, XML, JSX и т. д.).
  • Вы также можете полностью отключить предварительный просмотр, задав для abbreviation_preview значение false .

Отключить захват сокращений

Чтобы настроить автоматический захват сокращений, перейдите в пункт меню Настройки > Настройки пакета > Emmet > Настройки и обновите параметр auto_mark:

  • Установите значение false, чтобы полностью отключить захват сокращений.
  • Установите значение "разметка" или "таблица стилей", чтобы включить запись только для синтаксиса разметки (HTML, XML, JSX и т. д.) или таблицы стилей (CSS, SCSS, LESS и т. д.).

Например, если вы хотите захватывать сокращения для HTML и отключать его для CSS, установите "auto_mark": "markup" . Вы также можете применить те же значения для параметра abbreviation_preview, чтобы включить или отключить интерактивный предварительный просмотр полностью или только для определенных синтаксисов.

При отключенном захвате аббревиатур у вас есть несколько вариантов расширения аббревиатур вручную:

  • Вы можете ввести аббревиатуру (или поставить курсор за существующей аббревиатурой) и запустить действие Emmet: Развернуть аббревиатуру из палитры команд. Для этого действия рекомендуется установить сочетание клавиш:
  • Еще один вариант — запустить команду Emmet: Enter Abbreviation Mode: знак ⋮> указывает, что вы находитесь в режиме явных сокращений, и все, что вы вводите, будет рассматриваться и проверяться как сокращение Emmet. Затем вы можете нажать клавишу Tab или Enter, чтобы развернуть его, или Esc, чтобы избавиться.

Рекомендуется также добавить сочетание клавиш для этого действия:

Предварительный просмотр тега

Еще одна новая функция Emmet 2 — встроенный предварительный просмотр открывающего тега. Когда вы перемещаете курсор внутри имя закрывающего тега и соответствующий ему открытый тег не виден на экране, вы увидите встроенный предварительный просмотр тега:

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

Этот параметр отключен по умолчанию. Чтобы включить его, перейдите в Настройки > Настройки пакета > Emmet > Настройки и установите для параметра tag_preview значение true .

Добавление пользовательских фрагментов Emmet

Чтобы добавить новые фрагменты Emmet или изменить существующие, изменить основные настройки Emmet и т. д., перейдите в раздел Настройки > Настройки пакета > Emmet > Настройки и измените ключ конфигурации.

Вы можете настроить фрагменты/предпочтения глобально или для каждого синтаксиса. Эммет понимает два типа аббревиатур: разметка (используется для синтаксисов разметки, таких как HTML, Pug, JSX и т. д.) и таблицы стилей (для CSS, Sass, Less и т. д.). Чтобы добавить или изменить фрагменты глобально, вы должны использовать один из этих ключей в разделе конфигурации. Если вы хотите установить фрагменты только для определенного синтаксиса (например, только для JSX или HTML), вы должны использовать имя синтаксиса в качестве ключа. Вот пример конфигурации:

Дополнительные действия

Все остальные действия, такие как Wrap with Abbreviation, Balance, Select Item и т. д., также поддерживаются, но не имеют привязок клавиш по умолчанию. Вы должны либо вызвать эти действия через палитру команд, либо создать свои собственные сочетания клавиш (см. файл Default.sublime-commands для списка доступных действий).

Удобный способ добавить привязки клавиш для команд Emmet — перейти в меню Настройки > Настройки пакета > Emmet > Привязки клавиш и скопировать необходимые образцы привязок слева направо без комментариев.< /p>

В будущем подключаемый модуль Emmet для Sublime Text предоставит удобный пользовательский интерфейс для точной настройки параметров Emmet и привязок клавиш.

Часто задаваемые вопросы о переходе с версии 1

Вот некоторые наиболее часто задаваемые вопросы и проблемы, с которыми пользователи столкнулись после обновления до Emmet v2:

Все мои сочетания клавиш пропали/ничего не работает!

Emmet поставляется с множеством действий, таких как Wrap with Abbreviation, Balance, Select Item и т. д. В версии 1 все эти действия имели привязки клавиш по умолчанию. И некоторые из этих действий переопределяют действия ST по умолчанию, такие как Перейти к концу строки ( Ctrl+E ) или действия из пакетов по умолчанию. К сожалению, ST не предоставляет каких-либо средств для отмены привязки клавиш, исходящих из пакетов, поэтому для пользователей стало настоящей проблемой правильное восстановление поведения редактора.

В Emmet 2 все привязки клавиш по умолчанию отключены, поэтому их нужно добавлять вручную. Но не волнуйтесь, вам нужно просто раскомментировать их:

  • Перейдите к пункту меню Настройки > Настройки пакета > Emmet > Привязки клавиш.
  • Слева вы увидите пример списка действий Эммета с комментариями. Вам просто нужно скопировать нужные действия справа и раскомментировать их.

Кнопка Tab больше не работает

Скорее всего, вы обновили обработчик клавиши Tab для действия expand_abbreviation_by_tab из Emmet v1 в файле привязки клавиш: просто удалите его, он больше не действителен.

Мне не нравится новое поведение с захватом аббревиатуры, я бы хотел расширить с помощью Tab, как раньше

Вы можете получить почти то же поведение расширения аббревиатуры, что и в версии 1:

  • Перейдите в пункт меню Настройки > Настройки пакета > Emmet > Настройки и установите для параметра auto_mark значение false .
  • Добавьте следующее в файл привязок клавиш пользователя (пункт меню Preferences > Key Bindings):

Обратите внимание, что у старого поведения есть много недостатков: вы не сможете расширять нативные фрагменты ST и использовать клавишу Tab для вставки отступа после слова.

Разработка

Чтобы работать с исходным кодом плагина, не забудьте установить зависимость py-emmet. После проверки исходного кода перейдите в папку репозитория и запустите

В этой статье мы дадим вам 5 примеров неожиданных символов после символа продолжения строки в Python.

Хотите найти отличные решения?

5 примеров Python

Использование обратной косой черты

Мы пишем программу, которая вычисляет индекс массы тела человека (ИМТ). Для начала нам нужно вставить рост и вес в программу Python:

Примечание. Sublime text 3 не поддерживает приведенный выше код. Альтернатива:

Мы рассчитываем ИМТ пользователя.

Kg» — это вес человека в килограммах. «м2» — это рост человека в квадрате. Преобразованный в Python рецепт расчета ИМТ выглядит следующим образом:

Мы преобразовываем положительные стороны "веса" и "роста" в числа точек скимминга, чтобы мы могли выполнять над ними числовые функции.

затем вы распечатываете ИМТ клиента в центре управления.

Мы преобразовываем "ИМТ" в строку, используя стратегию str(a), чтобы связать ее с сообщением "Ваш ИМТ: ".

Мы округляем значение «ИМТ» до двух знаков после запятой, используя метод round()
Давайте запустим код:

SyntaxError: неожиданный символ после символа продолжения строки.

Добавьте файл, который должен быть доступен в этом каталоге.

Произошла ошибка. Это связано с тем, что мы использовали «\» в качестве администратора подразделения, а не знак «/».

Мы можем исправить наш код с помощью администратора раздела «/»:

Какой у вас рост? 1,70

Какой у вас вес? 63

Ваш ИМТ: 18,53

Наш код успешно вычислил ИМТ пользователя.

Разрыв строки после печати

Вам нужно сделать разрыв строки после вывода чего-либо на экран:

SyntaxError: поразительный символ после символа продолжения строки

Исправление простое, еще раз — косая черта препинания \ переходит в цитаты:

Python
Возможно, вам нужно добавить еще одну строку при выводе строки на экран, подобно этому см.

Базовый экземпляр

Еще один типичный пример этой ошибки — создание путей к документам Windows без ссылок. Вот еще одна модель из Stack Overflow:

Соединения строк

Часто у вас нет определенного способа записи или конверта, и вам нужно собирать его по частям. Вы можете сделать это, отказавшись от последовательностей \\ и строковых соединений \.

Тем не менее, эта ручная сортировка обычно является оправданием непредвиденной ошибки символа после символа продолжения строки. В любом случае осмоле к спасению.

Используйте путь. присоединиться к работе.

Путь. работа join не только работает за вас, но и определяет необходимые разделители в зависимости от рабочей среды, в которой вы запускаете свою программу.
Импорт ОС

Начальный символ после символа продолжения строки

Еще одна разновидность поразительной ошибки символа после символа продолжения строки — это точка, в которой вы пытаетесь запустить содержимое из краткого описания Python. Вот контент, точно отправленный из строки заказа Windows:

Тем не менее, вы попадете на краткий обзор Python, если сначала наберете python и нажмете Enter.

Здесь вы можете напрямую запустить код Python, например print("Hello, World!").

Более того, если вы попытаетесь показать запись взаимосвязи со строкой заказа Windows, вы получите грубую ошибку:

Python 3.8.2 (labels/v3.8.2:7b3ab59, 25 февраля 2020 г., 23:03:10) [MSC v.1916 64 бит (AMD64)] на win32 " или "разрешить" для получения дополнительных данных.

В прошлом году я начал экспериментировать с языком программирования Faust и хотел улучшить подсветку синтаксиса для него в Sublime Text, текстовом редакторе, который я использую для программирования. Я не хотел писать файл определения возвышенного синтаксиса вручную, так как это довольно сложно, поэтому вместо этого я написал программу для автоматического создания файла из формальной грамматики языка. Это тоже оказалось сложно! Но это мне больше по вкусу.

Примечание: вы можете просмотреть исходный код и документацию на Github и установить программу с помощью pip install sublime-from-cfg (требуется Python 3.9). Например, что-то вроде:

Сгенерированный мной синтаксис Faust находится здесь.

Файлы .sublime-syntax Sublime Text •

Подсветка синтаксиса уже включена в Sublime Text для многих популярных языков, таких как (например) C, где код автоматически окрашивается примерно так:

Обратите внимание, что if , printf и "Hello World!" окрашиваются по-разному. Чтобы создать эту подсветку синтаксиса, минимальный файл .sublime-syntax будет выглядеть примерно так:

Механизм подсветки синтаксиса имеет стек контекста, который всегда запускается в основном контексте в начале редактируемого файла. Всякий раз, когда один из объектов сопоставления в контексте соответствует (как регулярное выражение) текущему тексту, контекст может быть помещен в стек или может быть извлечено некоторое количество контекстов, и механизм синтаксиса переходит к следующей части редактируемого текста. файл. Например, когда появляется двойная кавычка, строковый контекст помещается в стек. Затем механизм синтаксиса продвигается вперед, пока не появится следующая двойная кавычка, а затем строковый контекст извлекается из стека, и механизм синтаксиса возвращается к основному контексту.

Это лишь самые основные функции, доступные авторам файлов .sublime-syntax. Вы также можете выполнять такие действия, как встраивание одного языка в другой (например, чтобы выделить HTML-тег как JavaScript), выполнять «недетерминированный» синтаксический анализ, прерывая его, когда происходит что-то неожиданное, и пробуя другую стратегию синтаксического анализа, и многое другое.

Языки программирования могут быть довольно сложными, поэтому файлы .sublime-syntax также становятся довольно сложными. Официальный файл определения синтаксиса языка Sublime Text C (на момент написания) состоит из 1320 строк. Длина JavaScript составляет 2533 строки. Длина Java составляет 3234 строки.

У Фауста уже есть определение языка •

Исходный код языка программирования Faust находится в свободном доступе на Github. Парсер для Faust генерируется через исходный файл yacc. Yacc — это генератор синтаксических анализаторов: программа, которая использует формальную грамматику для языка программирования и генерирует синтаксический анализатор (компонент компилятора) для этого языка. Это компилятор для компиляторов. Мне важно следующее: это означает, что уже есть краткое высокоуровневое описание языка программирования Faust. Выдержка из ссылки выше:

Это определяет допустимую программу Faust. Слово в нижнем регистре является нетерминалом. Слово в верхнем регистре является терминалом. Нетерминалы можно расширить, выбрав один из вариантов справа; терминалы («терминал» в смысле «конечный») больше не могут быть расширены.

Чтобы интерпретировать вышеизложенное: программа Faust начинается с программы . Это расширяется до stmtlist (единственный вариант). stmtlist может быть расширен либо до первого параметра (пустая строка), либо до второго параметра (stmtlist variantlist statment). Первый термин снова stmtlist. Это рекурсивное определение stmtlist, что означает, что stmtlist может ссылаться на оператор variantlist, повторяющийся любое количество раз. Пропустив список вариантов (который я пропустил, потому что он не очень информативен), оператор, по-видимому, может быть расширен несколькими различными способами – через некоторые догадки о том, что означают различные имена, оператор может быть либо импортом, либо объявлением (в двух различными способами), определение или «документ» (в данном случае это документация).

Если вы подробнее прочитаете приведенный выше связанный файл, то увидите, что все остальные нетерминалы (имя, строка, определение и т. д.) отображаются слева со своими вариантами расширения.

Бесконтекстные грамматики и генераторы синтаксических анализаторов •

Языковые описания этой формы, в которых нетерминалы раскрываются как строки нетерминалов и терминалов, известны как контекстно-свободные грамматики. Многие (даже большинство?) языков программирования можно описать с помощью контекстно-свободной грамматики. Контекстно-свободные грамматики также изучаются в теории формального языка, в теоретической лингвистике и информатике.

Контекстно-свободные грамматики также очень удобны для людей, создающих свои собственные языки программирования, поскольку генераторы синтаксических анализаторов, такие как yacc, могут использоваться для создания синтаксических анализаторов для них — генератор синтаксических анализаторов использует контекстно-свободную грамматику и создает синтаксический анализатор для языка.< /p>

Это означает, что многие языки программирования уже имеют контекстно-свободную грамматику, описывающую их либо как часть исходного кода языка, либо как часть его спецификации.

Преобразование CFG в возвышенное определение синтаксиса •

Итак, как преобразовать контекстно-свободную грамматику в файл .sublime-syntax? Я проиллюстрирую этот процесс несколькими постепенно усложняющимися примерами. (Хотя я опущу некоторые усложняющие детали.)

1. Только одно производство на нетерминал •

Во-первых, предположим, что у меня есть простая контекстно-свободная грамматика, в которой каждый нетерминал имеет только одну продукцию:

Здесь main , a и b — нетерминалы, а 'c', 'd', 'e' и 'f' — терминалы. Это очень скучный язык, единственной допустимой строкой которого является cdef. Это потому, что main расширяется до строки нетерминалов a, за которой следует b, каждый из a и b расширяется до пары терминалов, а затем расширение останавливается. На любом этапе нет альтернативного производства, которое можно было бы выбрать.

Чтобы отобразить это как определение .sublime-syntax, я создаю контекст для каждого нетерминала и каждого терминала:

Совпадение: инструкция '' означает "всегда совпадать"; set означает «извлечь текущий контекст, а затем отправить следующие контексты». Поэтому, когда запускается основной контекст, он сразу же появляется и заменяется контекстами b и a. Это в порядке, обратном производственному main : a b , так что a будет наверху стека. Затем аналогичным образом контекст a немедленно извлекается и заменяется терминалом-d и терминалом-c, соответствующими произведению a: 'c' 'd' .Контекст терминала-c будет совпадать с литеральным символом c, а затем всплывать (что делает терминал-d вершиной стека), а любой другой символ, не являющийся пробелом, будет помечен как недопустимый (это то, что делает включенный контекст ошибки — \S является регулярным выражением для «любого символа, отличного от пробела»). После сопоставления c, а затем d для контекста терминала-d, b оказывается на вершине стека и заменяется на [terminal-f, terminal-e] , так что e и f сопоставляются по очереди.

2. Несколько постановок с разными начальными наборами •

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

Теперь нетерминал a может соответствовать либо 'c', за которым следует 'd' или терминалу 'x' . Это более интересный язык, который может сопоставлять две строки: cdef и xef. (Хорошо, это только немного интереснее.)

Основной контекст по-прежнему выглядит так же, как и b , потому что оба этих нетерминала имеют только одно производство, но мне нужно изменить контекст a. Я могу сделать это с помощью упреждающего регулярного выражения, которое будет сопоставлять, но не использовать текст, так что его можно будет сопоставить позже:

Вместо безусловной замены текущего контекста на [terminal-d, terminal-c] , я устанавливаю контексты, соответствующие следующему символу. Если следующим символом является c, то регулярное выражение (?=c) соответствует, и контекст заменяется на [terminal-d, terminal-c] . Если вместо этого следующим символом является x, то регулярное выражение (?=x) совпадает, и контекст заменяется на terminal-x . Если следующий символ не является ни c, ни x, то это недопустимая строка в моем простом языке: контекст ошибки совпадет и пометит символ как недействительный.

В этом случае производство для обоих начинается с терминалов, поэтому легко понять, каким должно быть регулярное выражение с опережением, но производство также может начинаться с нетерминалов. Если, например, в языке есть правило main : a b | 'з'; , тогда мне нужно было бы знать, что выбрать b или 'z' . В этом случае я бы рекурсивно вычислил (для каждого нетерминала) набор возможных терминалов, с которых он мог начаться. Нетерминал a может начинаться с 'c' или 'x' , поэтому упреждающее регулярное выражение, соответствующее любому из этих символов, должно привести к выбору первой продукции a b . «z» должен привести к выбору второй продукции «z». (Я пропускаю некоторые детали, которые применимы, когда продукция может соответствовать пустой строке — см. страницу википедии по синтаксическим анализаторам LL для получения дополнительной информации.)

3. Несколько производств с перекрывающимся начальным набором •

Самая интересная и сложная ситуация, когда несколько продуктов могут начинаться с одного и того же терминала, и поэтому я не могу использовать регулярное выражение с опережением, чтобы решить, какой из них выбрать.

Это по-прежнему очень простой язык, в котором допустимы только три строки: cdef , czef и xef . Теперь контекст для a должен измениться, чтобы приспособиться к новой продукции 'c' 'z' , но, к сожалению, две продукции теперь начинаются с 'c', и регулярное выражение с опережением (?=c) не различает их.

Прежде чем я объясню, как я справляюсь с этим, я действительно хочу немного изменить свой подход к предыдущей ситуации и изменить способ обработки неожиданных символов:

Весь смысл этого заключается в обеспечении недетерминированного синтаксического анализа.

Синтаксический движок Sublime Text допускает недетерминированный синтаксический анализ. Вместо отправки или установки контекста вы можете ветвиться: при переходе вы предоставляете список контекстов, которые нужно попробовать, один за другим. Если во время одного из этих контекстов происходит действие fail, синтаксический движок возвращается к тому состоянию, в котором он был при ветвлении, и повторяет попытку со следующим контекстом. Ниже приведены полные контексты, соответствующие этому примеру, которые отличаются от предыдущей версии:

Всякий раз, когда предварительный просмотр может соответствовать более чем одной продукции, я создаю специальный контекст ветви (здесь a@01 ), чтобы попробовать каждую продукцию последовательно. Контекст для каждой продукции подталкивает пару контекстов для обработки успеха и неудачи соответственно, а затем контексты, соответствующие символам для этой продукции. Контекст успеха — это pop3, который просто выскакивает из контекста ветки (и пропускает буфер pop2), а контекст неудачи запускает специальное действие «попробовать следующую ветку». Последняя попытка для каждой ветки не имеет этого специального триггера (поскольку нет другой продукции, которую можно было бы попробовать), поэтому она просто выскакивает на pop2, чтобы можно было инициировать следующий сбой вверх по стеку.

Подробнее •

Вот и все! Я упустил некоторые детали, чтобы сделать историю относительно простой, но есть еще несколько приемов, которые я использую в неоднозначных ситуациях. Есть некоторые грамматики, с которыми я не могу справиться — например, леворекурсивные грамматики — и вы можете прочитать еще несколько подробностей о моем подходе на странице Github для проекта.The general parsing approach is due to Adrian Johnstone and Elizabeth Scott, though adapting that approach to generating a .sublime-syntax file is my own work. The file format I use to represent context-free grammars is from Benjamin Schaaf’s sbnf, which is a very similar project to mine (though implemented entirely differently).

御用小螃蟹 于 2020-10-30 11:00:36 发布 948 收藏

Unexpected trailing characters in Packages\User\Preferences.sublime-settings:x:x

03-19 2513

06-28 605

12-28 1万+

**解决方法:**所有出错的文件,将第一行代码的分号,删除,重新写上英文分号,保存即可 网上一些网友说是将文件的编码格式改为UTF-8保存就好。 但是我的文件格式本来就是UTF-8,保存了,编译还是出错。 再看下错误提示 原来是文件代码第一行的分号有错,其实我具体我也不知什么错误。 就删除分号,再重新写上英文分号,保存。 记得所有编译失败的文件如上操作。 .

09-06 3146

02-10 3万+

01-13 12

Texlive可以直接打开使用,但是在sublime中就是不行。这个错误一般在python编译的时候会出现的,而LateX是不会有这种错误。 解决方案:Tools>Build System 选择 LaTeX或者Automatic

11-11 51

09-28 1207

12-21 6740

1 导语 前两节我们分别解释了字符提取和字符过滤,在这过程中主要有=两个原因需要我们将单个字符组合成一个文字行或者段落之类(如图1)。一个重要的原因是出来不管是由于MSER的原因还是分类的原因,有些真的字符并没有找出来,比如i和j上面的点等等,当然实际中情况要远比这些严重的多,我们需要靠字符合并来恢复这些漏掉的字符。另外一个原因是在识别的时候有上下文会大大增加识别的精度,比如一个0,有时

vue脚手架报错error Unexpected trailing comma comma-dangle报错代码: 报错代码: // An highlighted block 911:17 error Unexpected trailing comma comma-dangle 922:19 error Unexpected trailing comma comma-dangle 939:28 error Unexpected trailing comma comma

10-04 7554

想修改sublime的删除快捷键为ctrl+d 保存配置文件时莫名其妙的报错 大意是期望逗号或括号结尾,却出现了意外字符,找了许久发现原来是上次设置的ctrl+M调用命令窗口运行方式的快捷时,结尾忘记加逗号,也即是,上一行末尾少一个逗号,问题不在新加的行。所以每行最后最好都加一个逗号,以免不必要的麻烦.

03-22 477

Читайте также: