используйте \path вместо \verb в biblatex

используйте \path вместо \verb в biblatex

Отмечая, что \pathможно сделать так, чтобы обернуть произвольный текст согласноПринудительные переносы строк в \url, я хотел бы использовать \pathвместо \verbвнутри biblatex для полей «дословно».

Это означало бы переопределение \verbи \endverb, см., например, эти строки в .bblфайле, сгенерированном из MWE ниже.

  \verb{file}
  \verb /Users/joe/Weholdthesetruthstobeself-evidentthatallmenarecreatedequalthattheyareendowedbytheirCreatorwithcertainunalienableRightsthatamongtheseareLifeLibertyandthepursuitofHappiness/dec.txt
  \endverb

Я не совсем понимаю, как это будет работать синтаксически.

На изображении ниже показан желаемый перенос строк в «Path»; (хорошее) поведение для имени файла с большим количеством подчеркиваний; и (не очень хорошее) поведение для имени файла без подчеркиваний.

введите описание изображения здесь

Исходный код для вышеизложенного:

% arara: pdflatex
% arara: biber
% arara: pdflatex
% arara: pdflatex
\documentclass{article}

\usepackage[style=reading,
            entryhead=true,
            entrykey=false,
            natbib,
            hyperref=false,
            url=false,
            doi=false,
            %style=apa,
            sorting=nyt,
            isbn=false,
            %backref=true,
            firstinits=true,
            minnames=13,
            maxnames=35,
            minbibnames=10,
            maxbibnames=100,
            parentracker=true,
            defernumbers=true,
            backend=biber]{biblatex}

\usepackage[hyphenbreaks]{breakurl}
\PassOptionsToPackage{hyphens}{url}

\begin{filecontents}{\jobname.bib}
@inproceedings{XXXXXX,
  author = {PQR},
  booktitle = {BBC},
  keywords = {LLM},
  title = {ARP},
  year = {2010a},
  file = {/Users/joe/We_hold_these_truths_to_be_self-evident_that_all_men_are_created_equal_that_they_are_endowed_by_their_Creator_with_certain_unalienable_Rights_that_among_these_are_Life_Liberty_and_the_pursuit_of_Happiness/dec.txt},
}

@inproceedings{YYYYYYYY,
  author = {PQR},
  booktitle = {BBC},
  keywords = {LLM},
  title = {ARP},
  year = {2010b},
  file = {/Users/joe/Weholdthesetruthstobeself-evidentthatallmenarecreatedequalthattheyareendowedbytheirCreatorwithcertainunalienableRightsthatamongtheseareLifeLibertyandthepursuitofHappiness/dec.txt},
}
\end{filecontents}

\expandafter\def\expandafter\UrlBreaks\expandafter{\UrlBreaks%  save the current one
  \do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j%
  \do\k\do\l\do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t%
  \do\u\do\v\do\w\do\x\do\y\do\z\do\A\do\B\do\C\do\D%
  \do\E\do\F\do\G\do\H\do\I\do\J\do\K\do\L\do\M\do\N%
  \do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V\do\W\do\X%
  \do\Y\do\Z}

\addbibresource{\jobname.bib}

\begin{document}

Path: \path{/Users/joe/Weholdthesetruthstobeself-evidentthatallmenarecreatedequalthattheyareendowedbytheirCreatorwithcertainunalienableRightsthatamongtheseareLifeLibertyandthepursuitofHappiness/dec.txt}

\nocite{*}

\printbibliography

\end{document}

решение1

Во-первых, вывод в .bblфайле предназначен исключительно для внутреннего использования, biblatexи его использование команды \verbне означает, что это команда, которая фактически используется для печати поля позже в библиографии. Поэтому исправление to .bblhave \pathвместо \verbпросто сломает biblatex, но не пути к файлам в библиографии.

Важным для вывода является формат поля для file. В вашей настройке (со readingстилем) определение такое

\DeclareFieldFormat{file}{\bibstring{file}\addcolon\space \url{#1}}

поэтому biblatexиспользует \urlкоманду из urlпакета (который он загружает).

Но это не вся история. biblatexимеет собственную модификацию urlнастроек для включения более тонкого контроля над разрывом URL в библиографии. В частности, \UrlBreaksпереопределен для всех URL, напечатанных biblatex. Таким образом, ваше переопределение \UrlBreaksперезаписывается.

Вы можете получить аналогичный результат для вашего переопределения с помощью biblatexвстроенных функций, установив biburlucpenaltyи biburllcpenaltyв ненулевые значения. Смотрите такжеРазрывы строк длинных URL-адресов в библиографии biblatex?. Для пущей убедительности вы также можете заглянуть в настройки biburlnumpenalty.

\documentclass{article}

\usepackage[style=reading, backend=biber]{biblatex}

\setcounter{biburlucpenalty}{9000}
\setcounter{biburllcpenalty}{9000}

%\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@inproceedings{XXXXXX,
  author = {PQR},
  booktitle = {BBC},
  keywords = {LLM},
  title = {ARP},
  year = {2010},
  file = {/Users/joe/We_hold_these_truths_to_be_self-evident_that_all_men_are_created_equal_that_they_are_endowed_by_their_Creator_with_certain_unalienable_Rights_that_among_these_are_Life_Liberty_and_the_pursuit_of_Happiness/dec.txt},
}

@inproceedings{YYYYYYYY,
  author = {PQR},
  booktitle = {BBC},
  keywords = {LLM},
  title = {ARP},
  year = {2010},
  file = {/Users/joe/Weholdthesetruthstobeself-evidentthatallmenarecreatedequalthattheyareendowedbytheirCreatorwithcertainunalienableRightsthatamongtheseareLifeLibertyandthepursuitofHappiness/dec.txt},
}
\end{filecontents}

\addbibresource{\jobname.bib}

\begin{document}
\nocite{*}
\printbibliography
\end{document}

Пути к файлам прерываются на концах строк.


Если вы не хотите использовать biblatexвстроенные функции и хотите перенести свои собственные urlнастройки в biblatex, то потребуется проделать немного дополнительной работы.

Самое дешевое решение, которое я нашел, было

\newcommand*{\mkjcurlbreaks}{%
  \expandafter\def\expandafter\UrlBreaks\expandafter{\UrlBreaks%  save the current one
    \do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j%
    \do\k\do\l\do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t%
    \do\u\do\v\do\w\do\x\do\y\do\z\do\A\do\B\do\C\do\D%
    \do\E\do\F\do\G\do\H\do\I\do\J\do\K\do\L\do\M\do\N%
    \do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V\do\W\do\X%
    \do\Y\do\Z}}

\mkjcurlbreaks

\DeclareFieldFormat{file}{\bibstring{file}\addcolon\space\mkjcurlbreaks\url{#1}}

Альтернативный подход мог бы изменитьопределение biblatex's\biburlsetupнапрямую.

Связанный контент